1 import copy 2 # 对于不可变类型(数值,元组,字符串),浅拷贝和深拷贝一样,内存地址都是一样的 3 a = 2 4 a2 = copy.copy(a) 5 a3 = copy.deepcopy(a) 6 print(‘a的内存地址是%s: ‘% id(a)) 7 print(‘a2的内存地址是%s: ‘% id(a2)) 8 print(‘a3的内存地址是%s: ‘% id(a3))
1 C:\ProgramData\Anaconda3\python.exe E:/cnz/day2/深拷贝浅拷贝.py 2 a的内存地址是8791395856160: 3 a2的内存地址是8791395856160: 4 a3的内存地址是8791395856160:
1 # 列表或者字典没有嵌套的情况下,浅拷贝和深拷贝内存地址与原对象都是不一样的,改变浅拷贝的值,不会影响原来的值 2 li = [1,2,3] 3 li2 = copy.copy(li) 4 li3 = copy.deepcopy(li) 5 print(‘li 的内存地址是%s: ‘ % id(li)) 6 print(‘li2 的内存地址是%s: ‘ % id(li2)) 7 print(‘li3 的内存地址是%s: ‘ % id(li3)) 8 9 # 改变li2的值 10 li2[0] = 4 11 print(li) 12 print(li2) 13 print(li3)
1 li 的内存地址是43566728: 2 li2 的内存地址是43565704: 3 li3 的内存地址是43634632: 4 [1, 2, 3] 5 [4, 2, 3] 6 [1, 2, 3]
1 # 列表中嵌套列表的情况,如果改变外层列表,浅拷贝的值不会变,如果改变原内层列表的值,浅拷贝的内层列表值也会改变,以为内层列表的内存地址是一样的 2 3 l = [1,2,[1,2]] 4 l2 = copy.copy(l) 5 l3 =copy.deepcopy(l) 6 print(‘l的内存地址是%s: ‘% id(l)) 7 print(‘l2的内存地址是%s: ‘% id(l2)) 8 print(‘l3的内存地址是%s: ‘% id(l3)) 9 l[2][0] = 3 10 print(‘l是%s‘ % l) 11 print(‘l2是%s‘ % l2) 12 print(‘l3是%s‘ % l3)
1 l的内存地址是43634504: 2 l2的内存地址是43634568: 3 l3的内存地址是43610184: 4 l是[1, 2, [3, 2]] 5 l2是[1, 2, [3, 2]] 6 l3是[1, 2, [1, 2]]
原文:https://www.cnblogs.com/hujc/p/11919800.html