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

Python列表赋值拼接结果与浅拷贝预期不符的原因咨询

代码执行逻辑解析:列表赋值与拼接的误区

让我们一步步拆解这段代码的执行过程,帮你理清为什么结果和你的预期有差异:

1. 初始列表创建

list1 = [3,4]

这行代码在内存中创建了一个列表对象 [3,4],变量 list1 会存储这个对象的内存地址,相当于list1“指向”了这个列表。

2. 变量赋值的本质(不是浅/深拷贝!)

list2 = list1

这里你误以为是浅拷贝或深拷贝,但其实这只是引用传递:list2 并没有复制一个新的列表,而是直接拿到了 list1 指向的那个内存地址。现在 list1 和 list2 都指向同一个列表对象 [3,4]——就像两个人共用一把钥匙开同一扇门。

3. 列表拼接的关键:创建新对象

list1 = list1 + [10,11]

Python 中的 + 运算符用于列表拼接时,会创建一个全新的列表对象:它把原list1的内容 [3,4] 和 [10,11] 合并,生成新列表 [3,4,10,11],然后把这个新对象的内存地址重新赋值给 list1。

这时候,list1 已经“换了门”,指向了新的列表;但 list2 仍然握着原来那把钥匙,指向最初的 [3,4]。

4. 打印结果的逻辑

所以执行 print(list1) 会输出新列表 [3, 4, 10, 11],print(list2) 输出的还是最初的 [3, 4]——你之前写反了实际运行结果哦。

补充:如果想让list2跟着变化怎么办?

如果希望修改 list1 时 list2 也同步更新,你需要修改原列表对象而不是创建新对象,比如用 extend() 方法:

list1 = [3,4]
list2 = list1
list1.extend([10,11])  # 直接修改原列表,不创建新对象
print(list1)  # 输出 [3,4,10,11]
print(list2)  # 输出 [3,4,10,11]

这时候因为list1和list2指向同一个对象,修改原对象会让两个变量的结果都改变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:21