可能重复:
Python列表追加行为
我打算初始化长度为n的列表.
x = [[]] * n
Run Code Online (Sandbox Code Playgroud)
但是,这会以某种方式将列表链接在一起.
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西:
[[], [0], []]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
ins*_*get 254
问题是它们在内存中都是完全相同的列表.当您使用[x]*n语法时,您获得的是n许多x对象的列表,但它们都是对同一对象的引用.它们不是不同的实例,而只是n对同一实例的引用.
要列出3个不同的列表,请执行以下操作:
x = [[] for i in range(3)]
Run Code Online (Sandbox Code Playgroud)
这为您提供了3个单独的实例[],这就是您想要的
[[]]*n 类似于
l = []
x = []
for i in range(n):
x.append(l)
Run Code Online (Sandbox Code Playgroud)
虽然[[] for i in range(3)]类似于:
x = []
for i in range(n):
x.append([]) # appending a new list!
Run Code Online (Sandbox Code Playgroud)
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146458 次 |
| 最近记录: |