You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python中多变量指向同一列表时,修改其一其余也同步变化?

为什么修改list_one后list_two也跟着变化?

你的代码和输出如下:

arr = [1,2,3,4,5]
list_one = arr
list_two = arr
list_one.pop(0)

print(list_one)
print(list_two)

# Output:
# [2, 3, 4, 5]
# [2, 3, 4, 5]

问题的核心在于Python对可变对象的赋值逻辑:

  • 列表是可变对象,当你执行list_one = arr、list_two = arr时,并没有复制arr的内容,而是让list_one和list_two都指向同一个内存地址里的原列表对象。
  • pop()是原地修改列表的方法——它直接在原列表对象上删除元素,不会生成新的列表对象。所以不管你用哪个指向该对象的变量调用pop(),修改的都是同一个底层列表。

如果想让list_two保留原列表的内容,你需要创建原列表的副本,而不是直接赋值引用。常见的创建副本的方式有三种:

  • 使用切片语法:list_two = arr[:]
  • 使用list()构造函数:list_two = list(arr)
  • 使用列表的copy()方法:list_two = arr.copy()

修改后的示例代码:

arr = [1,2,3,4,5]
list_one = arr
list_two = arr.copy()  # 创建副本
list_one.pop(0)

print(list_one)  # 输出: [2, 3, 4, 5]
print(list_two)  # 输出: [1, 2, 3, 4, 5]

内容的提问来源于stack exchange,提问作者Puneet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:20:47