python中的copy
一、变量传递
l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,id(l1))
print(l2,id(l2))
[1, 2, 3, 'a'] 139798038887048
[1, 2, 3, 'a'] 139798038887048
二、变量赋值传递
1) 传递前改变子级
l1 = [1,[2],3,4,5]
l2 = l1[:]
l1.append('b')
print(l1,id(l1))
print(l2,id(l2))
[1, [2], 3, 4, 5, 'b'] 140272967163528
[1, [2], 3, 4, 5] 140272967163016
2) 传递后改变子级
l1 = [1,[2],3,4,5]
l2 = l1[:]
l2.append('b')
print(l1,id(l1))
print(l2,id(l2))
[1, [2], 3, 4, 5] 140640091668104
[1, [2], 3, 4, 5, 'b'] 140640091667592
3) 传递前改变孙子级
l1 = [1,[2],3,4,5]
l2 = l1[:]
l1[1].append('a')
print(l1,id(l1))
print(l2,id(l2))
[1, [2, 'a'], 3, 4, 5] 139656870055560
[1, [2, 'a'], 3, 4, 5] 139656870055048
4) 传递后改变孙子级
l1 = [1,[2],3,4,5]
l2 = l1[:]
l2[1].append('a')
print(l1,id(l1))
print(l2,id(l2))
[1, [2, 'a'], 3, 4, 5] 139689202159240
[1, [2, 'a'], 3, 4, 5] 139689202158728
三、浅拷贝 copy
1)子级浅拷贝
l1 = [1,2,3]
l2 = l1.copy()
l2.append('a')
print(l1,id(l1))
print(l2,id(l2))
[1, 2, 3] 139654861499016
[1, 2, 3, 'a'] 139654860885640
2)孙子级浅拷贝
l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
l2.append('a')
print(l1,id(l1))
print(l2,id(l2))
l1[2].append('aa')
print(l1,id(l1))
print(l2,id(l2))
四、深拷贝 deepcopy
import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1))
print(l2,id(l2))
l1.append('aa')
l1[2].append('a')
print(l1,id(l1))
print(l2,id(l2))
[1, 2, [4, 5, 6], 3] 140161789759048
[1, 2, [4, 5, 6], 3] 140161766141320
[1, 2, [4, 5, 6, 'a'], 3, 'aa'] 140161789759048
[1, 2, [4, 5, 6], 3] 140161766141320