【问题标题】:Is there a subtle difference between some_list[:] = another_list vs some_list = another_list?some_list[:] = another_list 与 some_list = another_list 之间是否存在细微差别?
【发布时间】:2026-01-19 02:10:01
【问题描述】:

如标题所问, 有没有细微的差别

some_list[:] = another_list

对比

some_list = another_list

我看到人们两者都做,只是忽略了它,认为它们是等价的,但也许我错过了一个细微的区别?

【问题讨论】:

  • 第一个是切片赋值,它在原地修改some_list。第二个使两个变量引用同一个列表。
  • 这个问题肯定有重复的,但我一直没找到。
  • 阅读答案后,我会假设是这样,但我的最低谷歌搜索没有找到任何东西,所以我还是问了。没想到这么简单
  • 没那么微妙。

标签: python arrays python-3.x list


【解决方案1】:

第一个将改变原始列表 (some_list),而第二个将简单地创建一个引用 another_list 的新变量:

>>> some_list = [1, 2, 3]
>>> another_list = [4, 5, 6]
>>> some_dict = {"foo": some_list}
>>> some_list[:] = another_list
>>> some_dict["foo"]
[4, 5, 6]

>>> some_list = [1, 2, 3]
>>> another_list = [4, 5, 6]
>>> some_dict = {"foo": some_list}
>>> some_list = another_list
>>> some_dict["foo"]
[1, 2, 3]

【讨论】:

  • 第二个示例是否将another_list 的内存地址分配给some_list,但作为值存储在哈希中的some_list 具有原始地址(和原始列表值)?
  • @ChrisCharley 是的。 some_list 不再指向原始列表的 ([1, 2, 3]) 内存位置;但 dict 值仍然存在。
最近更新 更多