小知识
import copy
小数据池:——缓存机制(驻留机制)
== ——判断两边的值是否相等
a = 10
b = 10
print(a == b)
is——基于内存地址判断
a = 10
b = 10
print(a is b)
小数据池的数字范围-5~256
支持的类型:数字 字符串 布尔值
数字:-5~256——面试会问
字符串:在同一个代码块下 只要内容相同就采用的相同的内存地址
字符串在做乘法的时候长度不能超过20
字符串在做乘法的时候中文和特殊符号只能乘以1
布尔值:在同一个代码块下 只要内容相同就采用的相同的内存地址
小数据池的验证方法,必须脱离代码块才能进行验证
代码块:
一个py文件,一个函数,一个类,一个模块,终端中每一行都是一个代码块
支持的数据类型:数字 字符串 布尔值
数字: 在同一个代码块下 只要内容相同就采用的相同的内存地址(小于-5的就不是了),
数字在做乘法的时候范围-5~256
数字在做乘法的时候浮点数不好使了
字符串: 在同一个代码块下 只要内容相同就采用的相同的内存地址
字符串在做乘法的时候长度不能超过20
字符串在做乘法的时候中文和特殊符号乘以1或0
布尔值 :在同一个代码块下 只要内容相同就采用的相同的内存地址
先执行代码块的规则,在执行小数据池的规则——(驻留机制)
面试必问深浅拷贝:(复制)
赋值 浅拷贝 深拷贝
赋值
lst=[1,2,3,[5,6,7]]
lst1=lst
print(lst)
print(lst1)
lst[-1].append(8)
print(lst)
print(lst1)
结果:
[1, 2, 3, [5, 6, 7]]
[1, 2, 3, [5, 6, 7, 8]]
[1, 2, 3, [5, 6, 7, 8]]
[1, 2, 3, [5, 6, 7, 8]]
浅拷贝 copy()
切片是浅拷贝
lst2=lst.copy()
print(lst)
print(lst2)
print(id(lst))
print(id(lst2))
lst2[-1].append(9)
print(lst)
print(lst2)
lst[0]=10
print(lst)
print(lst2)
结果
[1, 2, 3, [5, 6, 7]]
2145917876488
2145947661896
[1, 2, 3, [5, 6, 7, 9]]
[1, 2, 3, [5, 6, 7, 9]]
[10, 2, 3, [5, 6, 7, 9]]
[1, 2, 3, [5, 6, 7, 9]]
浅拷贝的时候只会开辟一个新的容器列表,其他的元素使用的都是原列表的地址,
在修改新拷贝出列表中不可变元素的时候,原列表不改变,
在修改新拷贝出列表中可变元素的时候,原列表不改变,
在给新拷贝出的列表中可变数据类型进行增删改,原数据也跟着改变
浅拷贝只拷贝第一层元素
浅拷贝再修改第一层元素(不可变数据类型)的是时候,拷贝出来的新列表不改变
浅拷贝再修改第一层元素(可变数据类型)的是时候,拷贝出来的新列表不改变
浅拷贝再修改第一层元素中的元素时候,拷贝出来的新列表改变
深拷贝:
import copy
import copy
lst = [1,2,3,[5,6,7]]
lst1 = copy.deepcopy(lst)
print(lst)
print(lst1)
深拷贝开辟一个容器空间(列表),不可变数据类型共用一个地址,可变数据类型开辟一个新的空间,空间里的值是不可变的数据使用的是共用的,可变的数据再次开辟一个新的空间
集合:set——没有值的字典
无序的(不可以索引)元素:不可变数据类型
空集合--set()
天然去重
定义
增:
add()#添加一个元素
update()#迭代添加
删:
pop()有返回值,随机删除
remove()指定元素删除
clear() 清空
改:
先删除在加
查:
for循环
其他的操作:
&——求交集
|——并集
- ——差集
^ ——反交集
> ——父集(超集)
<——子集
frozenset()——冻结集合