copy() (浅copy)
如何理解:字面意思,也就是复制嵌套列表时“浅浅地”copy,只copy第一层,其它层共用地址空间。也就是在复制出的嵌套列表中,只有修改第一层元素时不影响原列表,修改嵌套列表元素,原列表中相应元素随之修改,它们共用地址空间。
举例说明:
>>> list1 = ['a',1,2,"haha",["user_name","password"],4,6]
>>> list2 = list1.copy() #浅copy了list1
>>> list2
['a', 1, 2, 'haha', ['user_name', 'password'], 4, 6]
>>> list2[0] = 520 #修改list2的第一个元素
>>> list2
[520, 1, 2, 'haha', ['user_name', 'password'], 4, 6]
>>> list1 #list1的第一个元素并没有受到影响,独立于list2
['a', 1, 2, 'haha', ['user_name', 'password'], 4, 6]
>>> list2[4][0] = "user_name2" #修改list2的嵌套列表元素中的第一个元素
>>> list2
[520, 1, 2, 'haha', ['user_name2', 'password'], 4, 6]
>>> list1 #此时list1中的嵌套列表元素也跟着发生了改变,与list2的嵌套元素共用一个地址
['a', 1, 2, 'haha', ['user_name2', 'password'], 4, 6]
应用场景设想:比如银行卡主副卡,可以共享流水信息,但是个人信息相互独立。
deepcopy() (深copy)
理解:即复制出的嵌套列表的所有层都可相互独立,修改复制出的list中任意元素都不会影响原列表。
使用:需要导入copy包
举例说明:
>>> import copy
>>> list3 = copy.deepcopy(list1)
>>> list3
['a', 1, 2, 'haha', ['user_name2', 'password'], 4, 6]
>>> list3[1] = 3 #修改list3中第二个元素
>>> list3
['a', 3, 2, 'haha', ['user_name2', 'password'], 4, 6]
>>> list1 #list1第二个元素不受影响
['a', 1, 2, 'haha', ['user_name2', 'password'], 4, 6]
>>> list3[4][1] = "user_name3" #修改list3中嵌套列表元素中第二个元素
>>> list3
['a', 3, 2, 'haha', ['user_name2', 'user_name3'], 4, 6]
>>> list1 #list1还是不受影响
['a', 1, 2, 'haha', ['user_name2', 'password'], 4, 6]