【发布时间】:2019-02-28 18:56:20
【问题描述】:
bs = [1, 2, 3]
print(id(bs))
print(id(bs[:]))
xs = bs[:]
xs[1] = [9, 9, 9]
print(bs)
print(xs)
-------------
4452573000
4452573064
[1, 2, 3]
[1, [9, 9, 9], 3]
看来bs[:] 做了一个深拷贝到xs
bs = [1, 2, 3]
print(id(bs))
print(id(bs[:]))
xs = bs[:] = [4, 5, 6]
print(id(xs))
print(bs)
print(xs)
----------
4518600520
4518600584
4518600584
[4, 5, 6]
[4, 5, 6]
看来bs[:] 做了浅拷贝到xs
bs[:] = [4, 5, 6] 会将bs 的原始列表修改为[4, 5, 6]。
但是如果只做xs = bs[:]和xs[1] = [9, 9, 9],它不会影响原来的bs列表,它仍然是[1,2,3]
【问题讨论】:
-
ID 值仅保证对于具有重叠生命周期的对象是不同的。
id对于 Python 的新学习者来说几乎毫无用处,因为从结果中提取任何有用的含义都需要高水平的理解。 -
列出切片总是创建浅拷贝。是什么让你觉得“似乎 bs[:] 对 xs 做了深拷贝”???
标签: python slice deep-copy shallow-copy