在Python中将列表元素复制回列表

Sun*_*tal 4 python copy list mutable

将元素复制回列表:

>> a = [[1,2],[3,4]]
>> b = []
>> b = a[1]
>> a.insert(1,b)
>> a
[[1,2],[3,4],[3,4]]
>> a[2][0] = 0
>> a
???
Run Code Online (Sandbox Code Playgroud)

你期望列出'a'是什么?它出现为[[1,2],[0,4],[0,4]]这对我来说非常令人惊讶,而我预期[[1,2],[1,4],[0, 4]]

我有点知道答案但是,这个想法还不是很清楚.请详细说明为什么会发生这种情况以及如何摆脱它?

PYA*_*PYA 6

b = a[1]
a.insert(1,b)
Run Code Online (Sandbox Code Playgroud)

b是一个引用,a[1]当你在插入它之后修改引用时,它会出现在两个地方,因为它实际上指向相同的数据.

如果你想避免这种情况,请使用 deepcopy

from copy import deepcopy

a = [[1,2],[3,4]]
b = []
b = deepcopy(a[1])
a.insert(1,b)
print(a) # prints [[1, 2], [3, 4], [3, 4]]
a[2][0] = 0
print(a) # prints [[1, 2], [3, 4], [0, 4]]
Run Code Online (Sandbox Code Playgroud)