2015-01-01 32 views
0

我想高效地将一堆变量设置为空列表。但是,使用这种方法,对一个变量的操作似乎适用于所有人:将许多变量设置为相同:添加到一个变量添加到许多

>>> r1,r2,r3,r4,r5,r6,r7,r8=[[]]*8 
>>> r1 
[] 
>>> r1+=[2] 
>>> r1,r2 
([2], [2]) 

这是为什么?另外,什么是使每个变量独立的最有效的方法?

+0

为什么不只是有一个列表的列表?与8个变量相反?甚至字典? – Ffisegydd

+0

@Ffisegydd有趣。关于你链接的问题:如果语法[x] * 4创建了一个4项目列表,其内容全部引用同一个对象,为什么[[x] * 4] * 2没有完成相同的操作,但共有8个对象?为什么只有每个内部列表的第一个元素发生了变化? – doublefelix

回答

1

[[]]*8会创建一个8个对同一个列表对象的引用列表。这就是为什么当你更新它们时它们都会受到影响。为了使八个不同的列表,使用generator expression

r1,r2,r3,r4,r5,r6,r7,r8 = ([] for _ in range(8)) 

你也可以使用一个list comprehension

r1,r2,r3,r4,r5,r6,r7,r8 = [[] for _ in range(8)]