1、浅copy :List1和List2本质上引用的内存地址是一致,修改某个字符号,会更新新的地址,所以List1和List2不会同步变化;
嵌套列表修改会同步更新,本质这个嵌套列表地址没有被修改,所以List2里的嵌套列表里面的字符修改后,列表地址是不变的,因此List1的嵌套列表还是引用相同地址
List1 = ['List1',['A', 'B']]
List2 = List1.copy()
print(List1,List2,id(List1[0]) ,id(List2[0]))
List2[0]='List2修改'
print(List1,List2,id(List1[0]) ,id(List2[0]))
List2[-1][0] = 'A换成B'
print(List1,List2,id(List1[0]) ,id(List2[0]))
返回结果:
['List1', ['A', 'B']] ['List1', ['A', 'B']] 2833940373664 2833940373664
['List1', ['A', 'B']] ['List2修改', ['A', 'B']] 2833940373664 2833941158384
['List1', ['A换成B', 'B']] ['List2修改', ['A换成B', 'B']] 2833940373664 2833941158384
2、深copy则是使用了新地址,因此修改不会有互相影响。
import copy
List1 = ['List1',['A', 'B']]
List2 = copy.deepcopy(List1)
print(List1,List2,id(List1[0]) ,id(List2[0]))
List2[0]='List2修改'
print(List1,List2,id(List1[0]) ,id(List2[0]))
List2[-1][0] = 'A换成B'
print(List1,List2,id(List1[0]) ,id(List2[0]))
返回结果:
['List1', ['A', 'B']] ['List1', ['A', 'B']] 1990707863712 1990707863712
['List1', ['A', 'B']] ['List2修改', ['A', 'B']] 1990707863712 1990708779504
['List1', ['A', 'B']] ['List2修改', ['A换成B', 'B']] 1990707863712 1990708779504
本文详细解释了浅复制和深复制在Python中对列表操作的影响,通过实例展示了两者在内存地址、同步变化和独立性上的区别。理解这些概念对于避免意外副作用至关重要。
1536

被折叠的 条评论
为什么被折叠?



