复制:赋值后完全一样,指向内存空间。
l1 = [1,2,3,['barry','alex']]
第一步:把l1赋值给l2 l2 = l1 第二步:修改l1的索引值
查看l1、l2的值,现象是完全一致 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', 'alex']] print(l2) # [111, 2, 3, ['barry', 'alex']] 第三步:修改l1第二层的值
值仍然相同 l1[3][0] = 'wusir' print(l1) # [111, 2, 3, ['wusir', 'alex']] print(l2) # [111, 2, 3, ['wusir', 'alex']]
结论:赋值是内存指向变量,所以值是相同的
浅拷贝:嵌套型数据类型第一层拷贝后是完全是两份,改变其中一个
l1 = [1,2,3,['barry','alex']]
第一步:拷贝l1赋值给l2
l2 = l1.copy()
查看l1与l2的内存地址
现象是l1与l2是完全不一样的两份
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
第二步:修改第一层的数据
现象:内存地址仍然是两份完全不同的
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
第三步:修改内层数据
现象:修改后内存地址仍然一致
l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
现象:浅拷贝后修改第一层内存地址不同,修改第二层内存地址相同
深拷贝:拷贝后无论多少层都一样
import copy l1 = [1,2,3,['barry','alex']]
第一步l1深拷贝赋值给l2 l2 = copy.deepcopy(l1) 第二步:查看l1与l2的id值 print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 第三步:修改第一层的数据
现象:内存地址不一样 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 第四步:修改内层数据
现象:内存地址仍然不同 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
结论:深拷贝拷贝后内存地址是完全不同的两份数据,无论修改几层嵌套内存地址都是完全不同的