Python深浅拷贝
# 深浅拷贝
# 无论修改哪一层 赋值的话都会修改 共享一块内存空间
a = [[1, 2], 'joe', 'smith']
b = a
a[0][0] = 3
print('赋值修改第二层', a, b)
a[1] = '88'
print('赋值修改第一层', a, b)
# 拷贝的话 只会影响到第一层 第2,3...层都没有
a = [[1, 2], 'joe', 'smith']
b = a.copy()
a[0][0] = 3
print('拷贝修改第二层', a, b)
a[1] = '88'
print('拷贝修改第一层', a, b)
# 浅拷贝 只会拷贝第一层 不会拷贝第2.3...
# 重要 b 与 b2的区别
a = []
b = a # 深拷贝 共享一块内存
b2 = a.copy() # 浅拷贝 只会影响到第一层
# 赋值 a指向1的地址 b也指向了1的地址(虽然是通过a,但是也是获得最后的1的地址) 然后a又指向了2的地址
a = 1
b = a
a = 2
print(a)
print(b)
要点:
- 浅拷贝:copy()函数 只会影响到列表第一层 即拷贝前与拷贝后修改的话只会影响第一层
- 深拷贝 :直接赋值 因为是共享一块内存,故拷贝前与拷贝后修改的话保持一致
- 赋值 = :可以理解为门牌号, a=1 b=a a,b两个门牌号都指向1的地址,如果再来a=2 的话,就是门牌号a 摘下来放到指向2的地址 故 print(a)>>2, print(b) >>1。
还没有评论,来说两句吧...