为什么这个用于初始化列表列表的代码显然将列表链接在一起?[重复]
- 2025-02-10 08:57:00
- admin 原创
- 50
问题描述:
我打算初始化一个长度为 n 的列表列表。
x = [[]] * n
然而,这以某种方式将这些列表联系在一起。
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
我希望有类似的东西:
[[], [0], []]
有什么想法吗?
解决方案 1:
问题是它们在内存中都是完全相同的列表。使用语法时,您得到的是许多对象[x]*n
的列表,但它们都是对同一对象的引用。它们不是不同的实例,而是对同一实例的引用。n
`x`n
要列出 3 个不同的列表,请执行以下操作:
x = [[] for i in range(3)]
这为你提供了 3 个单独的实例[]
,这正是你想要的
[[]]*n
类似于
l = []
x = []
for i in range(n):
x.append(l)
类似于[[] for i in range(3)]
:
x = []
for i in range(n):
x.append([]) # appending a new list!
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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD