2014-12-04 80 views

回答

2

用途:

a = [1,5,3,4] 
b = a[:] # <- this is where you need to add ':' 
a += [6] 

copy.deepcopy()(此解决方案是多方面的列表更好,因为它会为每个维度创建一个副本):

import copy 

a = [1,5,3,4] 
b = copy.deepcopy(a) 
a += [6] 

或:

b = list(a) 
+0

请解释你的downvote。 – syntagma 2014-12-04 22:09:53

+1

请记住,尽管解决方案'b = a [:]'适用于单维列表,对于多维度,则需要深度复制 – matts1 2014-12-04 22:15:57

1

您可以用列表的副本:

b = list(a) 
+0

, – Hackaholic 2014-12-04 22:12:55

0

这是什么情况,为什么你有时需要深度复制的解释。在Python中,某些类型的变量(如列表)存储方式稍有不同。当你指定[1, 5, 3, 4]时,你实际上在做什么是将一个指针分配给一个指针(告诉你该列表在哪里)。当你说b = a时,你将b赋给一个 - 这是一个指针。所以他们现在都是同一个指针,指向同一个地方。因此,当你改变一个时,另一个也会改变。

现在寻求解决方案。有3个建议的解决方案。

import copy 
b = copy.deepcopy(a) 
b = a[:] 
b = list(a) 

第一,做一个深拷贝,永远是可行的,但当然它比其他2

的第二部作品更多的努力,因为a[:]说:“让我从所有元素的列表“(请参阅python中的列表/字符串切片),因此它获取a中的每个项目并将其放入b中。第三种方法与第二种方法完全相同。但是,它们在处理多个维度时遇到问题。

>>> a = [[1]] 
>>> b=list(a) # or a[:], they do the same thing 
>>> a[0].append(1) 
>>> a.append(2) 
>>> b 
[[1, 1]] 
>>> a 
[[1, 1], 2] 

这里的问题是,是一个指向一个列表,该列表中的第一项是一个指针,第二个列表。使用这种方法,我们复制列表中的所有项目(指向第二个列表的指针),所以我们实际上并没有自己的第二个列表 - 它与a具有相同的指针。这是深层复制为你做的。

相关问题