Why does this code for initializing a list of lists apparently link the lists together?(为什么用于初始化列表的代码显然将列表链接在一起?)
本文介绍了为什么用于初始化列表的代码显然将列表链接在一起?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我打算初始化长度为n的列表列表。
x = [[]] * n
但是,这以某种方式将列表链接在一起。
>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]
我希望有如下内容:
[[], [0], []]
有什么想法吗?
推荐答案
问题是它们在内存中都是完全相同的列表。使用[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
这篇关于为什么用于初始化列表的代码显然将列表链接在一起?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:为什么用于初始化列表的代码显然将列表链接在一起?


猜你喜欢
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何将一个类的函数分成多个文件? 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01