支持str,int,bool
id 查看空间的内存地址 获取开辟空间的一种地址 print(id(a))
代码块: 一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
在python中是用字典的方式存储
is # 判断两个内存地址是否相同 # 必须记住
== # 判断等号两边的值是否相同 # 必须记住
字符串:1.字符串在做乘法的时候总长度不能超过20,进行驻留 # 记住
2.自己定义的字符串 长度不限制 字符串必须(字母,数字.下划线)组成,进行驻留
3.特殊字符(中文除外)定义1个时候,进行驻留
4.字符串*1 其实就是赋值
如果is判断相同 == 一定相同
如果==判断相同 is 不一定相同
a = 1000
b = 1000
print(a == b)
a = "alexdsb" * 2
b = "alexdsb" * 2
print(a is b)
a ="12345678912345678qwertyuioqwertUIOWERTYUIOQghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf"
b ="12345678912345678qwertyuioqwertUIOWERTYUIOQghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf"
print(a is b)
a = "你"
b = "你"
print(a is b) # pycharm中是True 因为执行了代码块,终端中是False
a = "@"
b = "@"
print(a is b)
a = "你好"
b = a * 1
print(a is b) 先执行代码块,不符合代码块才会执行小数据
代码块的规则:
数字: 全部驻留
字符串:
1.字符做乘法的时候总长度不能超过20
2.自定定义的都驻留
3.乘数为1的时候 就是赋值
4.python3.7 乘法的时候总长度不能超过4096
总结:
小数池 -- 支持: str,int,bool
小数据池数字: -5 ~ 256
小数据池字符串: 乘法时长度不能超过20
怎么能自己驻留?
需要使用python的内置模块
from sys import intern
a = intern("@@@@@@"*20)
b = intern("@@@@@@"*20)
print(a is b) # 自己进行驻留
小数据在哪用?
1.面试的时候偶尔会用到
2.解决自己的疑惑
集合( 集合就是一个没有值的字典,遵循:唯一,无序,元素要求可哈希(不可变)------------------------set {1,2,3}
s = {1,2,3,"123",False,(1,2,3,4)}
集合是无序的
集合是可变的
集合的增删改
增:
s.update("3456") # 迭代添加
print(s)
s.add("怼怼")
print(s)
删:
s = {1,2,3,"123",False,(1,2,3,4)}
print(s)
s.pop() #随机删除
s.remove(3) # 通过元素删除
s.clear() # 清空
del s #删除整个集合
print(s)
改:删了再加
查:
for
天然去重 -- 唯一
其他操作:
s1 = {1,2,3,4,5,6,7}
s2 = {3,4,5,6
print(s1 - s2) #差集
print(s1 | s2) #并集 (合集)
print(s1 & s2) #交集
print(s1 ^ s2) #对称差集 -- 反交集
print(s1 > s2) # 超集 -- 父集
print(s1 < s2) # 子集
冻结集合(可变 转换成 不可变) -- 更不常用:
f_s = frozenset({1,2,3,4,5})
dic = {f_s:"1"}
print(dic)
集合在哪里用
去重
li = [1,2,3,4,5,2,2,2,33,3,3,2,2,1,]
print(list(set(li)))]
面试题:
li = [1,2,3,4,2,1,3] #一行代码去重
print(list(set(li)))
深浅拷贝(拷贝 -- copy 复制了一份)
l1 = [1,2,3,4,[5,6,7,]]
l2 = l1 # 赋值 赋值不是拷贝
l1.append(8)
print(l1)
print(l2)
l1 = [1,2,3,4,[4,5,6]]
l2 = l1[:] # 浅拷贝
l2 = l1.copy() # 浅拷贝 -- 只拷贝第一层
print(id(l1[0]))
print(id(l2[0]))
浅拷贝会创建一个新的列表(容器),
新创建的列表中的元素和原列表的元素用的是同一个内存空间
l1 = [1,2,3,4]
l2 = l1.copy()
print(l1)
print(id(l1))
print(id(l2))
print(id(l1[0]))
print(id(l2[0]))
li = [1,2,32,[3,4,5]]
l2 = li.copy()
li.append(8)
print(l2)
print(li)
li[-1].append(8)
print(l2)
l1 = [1,2,3,(1,2,3)]
l2 = l1.copy()
l2[-1] = 6
print(l1) # 不变
print(l2) # 不变
l1 = [1,2,3,4,[5,6,7,]]
l2 = l1.copy()
l1[-1].append(8)
print(l2) #[1,2,3,4,[5,6,7,8]]
li = [1,2,3,4,]
l2 = li # 赋值 两个变量指向了一个列表内存地址
li.append(9)
print(l2)
l1 = [1,2,3,4,5,]
l2 = l1.copy()
l1.append(8)
print(l2)
print(l1)
l1 = [1,2,3,[4,5,6]]
l2 = l1.copy()
l2[-1] = 77
print(l1)
print(l2)
深拷贝:import copy
深拷贝:import copy
li = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy(li)
print(li)
print(id(li))
print(id(li[-1]))
print(l2)
print(id(l2))
print(id(l2[-1]))
深拷贝 --
不可变的数据类型和原列表指向同一个空间
可变数据会创建一个新的空间
import copy
li = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy(li)
li[-1].append(678)
print(l2)
import copy
li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}]
l2 = copy.deepcopy(li)
li[-1]['k'] = "a"
print(li)
print(l2)
怎么用,在哪用:
dic = {} # "v":4
li = [] #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}]
for i in range(0,5):
dic["v"] = i
li.append(dic)
print(li)
原文:https://www.cnblogs.com/-777/p/11005589.html