【python】copy和赋值

shallow copy 和 deep copy

【引用】https://blog.csdn.net/u010712012/article/details/79754132

  • 对于简单的 object,用 shallow copy 和 deep copy 没区别
  • 复杂的 object, 如 list 中套着 list 的情况
    • shallow copy 中的 子list,并未从原 object 真的「独立」出来
    • 也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。
  • copy.deepcopy().copy() 是一样的
import copy

x = [1,[10]]
y = copy.copy(x)      # 尽管内存地址变了,但浅层copy无法让子list真正独立     
z = copy.deepcopy(x)  # z = x.copy()
y[1][0] = 250
print('x',x)
print('y',y)
print('z',z)
print(id(x))
print(id(y))
print(id(z))

>>>

x [1, [250]]
y [1, [250]]
z [1, [10]]
2232827410688
2232822278912
2232817470848

赋值

当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。

当list是部分改变,内存地址还是原来的地址,值也跟着改变


  • 当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。
a = 1           # *
b = a
print(id(a))
print(id(b))
a = 3           # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
140707619157792  # *
140707619157792
3
1
140707619157856  # ***
140707619157792
a = [1,2,3]    # *
b = a
print(id(a))
print(id(b))
a = [1]        # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232832929728  # *
2232832929728
[1, 2]
[1, 2, 3]
2232832046656  # ***
2232832929728
  • 当list是部分改变,内存地址还是原来的地址,值也跟着改变
a = [1,1]
b = a
print(id(a))
print(id(b))
a[1] = 2      # ***
print(a)
print(b)
print(id(a))
print(id(b))
>>>
2232834388992
2232834388992
[1, 2]
[1, 2]
2232834388992
2232834388992
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容