2012-03-04 54 views
2

可能重复:
Python list confusion蟒蛇空单招

我有一个小问题有关Python列表:

为什么会出现这种情况?

x = [[]] * 4 
x[0].append('x') -> [['x'], ['x'], ['x'], ['x']] 
+1

。而且由于在你的列表中你有4个列表指向相同的内存空间,如果你修改其中的一个,这个改变将影响所有内存空间。 – rubik 2012-03-04 11:44:04

+0

此外,请参阅[Python常见问题中的此条目](http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list) – BioGeek 2012-03-04 16:07:19

+0

好的,谢谢.. – cval 2012-03-04 20:48:45

回答

6

[]相同的情况下被复制,所以当你追加到第一个'x',你实际上将其追加到所有的 - 因为他们都是同一个对象!

做正确的做法是,在每次明确创建一个新的列表实例:因为您是复制相同的列表四次

x = [[] for _ in range(4)] 
+1

我为此答案添加了一个可能的解决方案。希望你不介意:) – 2012-03-04 11:51:01

+0

谢谢!似乎是合理的)) – cval 2012-03-04 11:55:18

+0

要清楚:实例[]不被*重复*。表达式[[[]] * 4'创建一个带有四个引用的列表,其中包含[]的同一个实例。 – alexis 2012-03-04 11:59:19