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