写个python程序被深浅拷贝疯狂折磨,写个博客希望能记住
1.首先是list
a = [1,2,3,4,5]
b = a
c = a[:]
a.append(6)
print(a)
print(b)
print(c)
运行结果为:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
- list切片是深拷贝
- list赋值是浅拷贝
- 当 list 类型的对象进行 append 操作时,实际上追加的是该对象的引用
用 c = a[:] 这个技巧可以取代c = copy.deepcopy(a)
2.接下来是numpy
a = np.array([1,2,3,4,5])
c = a[:]
b = a
a[2] = 666
print(a)
print(b)
print(c)
结果:
[ 1 2 666 4 5 6]
[ 1 2 666 4 5 6]
[ 1 2 666 4 5 6]
可见numpy切片、赋值都是浅拷贝