【问题标题】:Generating a list of lists in Python, but get the same ID of nested elements在 Python 中生成列表列表,但获得相同 ID 的嵌套元素
【发布时间】:2021-10-03 00:55:48
【问题描述】:

所以,我正在使用这个代码:

list_of_lists = []
sample_list = ['1', '2', '3']

for x in range(3):
    list_of_lists.append(sample_list)

print(id(list_of_lists[0][1]),
      id(list_of_lists[1][1]),
      id(list_of_lists[2][1]))

实际上,子列表中的项目是相同的对象!

>140324175479088 140324175479088 140324175479088

如果我想将 list_of_lists[0][1] 更改为 '0',所有子列表都会相应更改。

为什么会这样?如何以正确的方式从 sample_list 生成 list_of_lists 以使每个子列表中的项目独立?

【问题讨论】:

  • 因为你一遍又一遍地附加同一个对象。请改用.append(sample_list.copy())
  • 哦...同样的结果。即使使用.copy(),所有项目仍然具有相同的 id
  • 其实可以的!是的,ID 还是一样的,只是在我没有更改任何元素之前。谢谢!
  • @JohnGalt 这可能是因为 python 实习生字符串值达到一定长度
  • 是的,在某些情况下您可能需要使用 deepcopy(从复制模块导入),但某些值(如小字符串和整数)将始终具有相同的 id。

标签: python list items


【解决方案1】:

我没有足够的声誉来发表评论...试试.deepcopy()

【讨论】:

  • 是的!有用!谢谢。你不知道任何关于 Python 中具有相同 ID 的特性的文章吗?我只是想弄清楚它实际上是如何工作的,以及 Python 是如何在内存中存储对象的。
  • 我不知道有什么好的资源,如果你找到我会感兴趣的。
  • 我4小时前就开始学习Python了。所以,我不认为我现在可以推荐任何东西)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
相关资源
最近更新 更多