一 深浅拷贝
1. 浅拷贝
lst = [1,2,3,[4,5,6]]
lst1 = lst.copy() # lst1 = lst[:] 新开辟一块空间
lst[-1].append(8)
print(lst)
print(lst1)
输出结果:
[1, 2, 3, [4, 5, 6, 8]]
[1, 2, 3, [4, 5, 6, 8]]
字典的值是列表,列表里的元素是第二层元素
dic = {'123':[1,2,3,[4,5,6]]}
dic1 = dic.copy()
dic['123'].append(8)
print(dic)
print(dic1)
输出结果:
{'123': [1, 2, 3, [4, 5, 6], 8]}
{'123': [1, 2, 3, [4, 5, 6], 8]}
lst = [1,2,3,[4,5,6]]
lst1 = lst.copy() #新开辟一块空间
lst[-1] = 8 # lst.append(8)
print(lst)
print(lst1)
输出结果:
[1, 2, 3, 8] # [1, 2, 3, [4, 5, 6], 8]
[1, 2, 3, [4, 5, 6]] # [1, 2, 3, [4, 5, 6]]
浅拷贝的时候,只会开辟一个新的列表空间,其他元素使用都是原列表的中的元素
浅拷贝在修改新拷贝的列表中可变(不可变)元素的时候,原列表不进行改变
浅拷贝在对新拷贝的列表中可变数据类型进行增删改的时候,原列表进行改变
浅拷贝的时候只拷贝第一层元素
2. 深拷贝
import copy #导入
lst = [1,2,3,[4,5,6]]
lst1 = copy.deepcopy(lst)
lst[-1].append(8)
print(lst)
print(lst1)
输出结果:
[1, 2, 3, [4, 5, 6, 8]]
[1, 2, 3, [4, 5, 6]]
深拷贝要先开辟一个新的空间(列表),不可变数据公用,可变数据类型再次开辟一个新的空间,空间里的值是不可变数据使用的是公用的,可变数据类型再次开辟一个新的空间
对原数据进行修改,深拷贝的内容不进行改变
二 小数据池 缓存机制(驻留机制)
== 判断两边内容是否相等
is 基于内存地址进行判断
支持的类型:数字,字符串,布尔值
小数据池的数字范围:-5 ~ 256
字符串:在同一个代码块下,只要内容相同就采用相同的内存地址,在做乘法的时候,总长度不能超过20(乘1除外),乘法的时候中文,特殊符号只能乘0,python3.7乘法的时候总长不能超过4096
布尔值:在同一个代码块下,只要内容相同就采用相同的内存地址
小数据池的验证方法,必须脱离代码块才能进行验证
先执行代码块的规则,再执行小数据池的规则 (驻留机制)
三 代码块
一个文件,一个函数,一个类,一个模块,终端中每一行是一个代码块
支持的数据类型:数字,字符串,布尔会
数字:在同一个代码块下,只要内容相同就采用相同的内存地址(-6及以下就不是),数字在做乘法的时候范围:-5 ~ 256,数字在做乘法的时候不能使用浮点数
字符串:在同一个代码块下,只要内容相同就采用相同的内存地址,在做乘法的时候,总长度不能超过20(乘1除外),乘法的时候中文,特殊符号乘1或0
布尔值:在同一个代码块下,只要内容相同就采用相同的内存地址