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

为什么Python中复制列表需使用.copy()而复制整数不需要?

Python整数和列表赋值行为差异的核心原因

本质是Python的引用赋值规则和可变/不可变对象类型差异共同导致的:

  • Python中所有A = B的赋值操作,本质都不是把B的值拷贝一份给A,而是让变量A绑定到B当前指向的内存对象上,所有变量本质都是指向内存对象的引用标签。

1. 整数属于不可变对象

不可变对象的核心特征是:对象创建后,内存中存储的内容就不能被修改。
你以为是修改了B的整数值,实际是让B绑定到了一个新的整数对象上,原来的旧整数对象没有被改变,A依然绑定在旧对象上,因此二者互不影响。
示例代码:

B = 10
A = B  # A、B同时指向内存中存储10的不可变对象
B = 20  # 没有修改10这个对象,而是让B绑定到新的存储20的对象
print(A) # 输出10,A仍然指向原对象

2. 列表属于可变对象

可变对象的核心特征是:内存中存储的内容可以被直接修改,不需要创建新对象。
直接写A = B时,A和B绑定的是同一个列表对象,你修改列表的元素、增删内容等操作,都是直接修改这个共享对象的内容,因此两个变量的读取结果会同步变化。只有调用copy()方法时,才会在内存中生成一个全新的独立列表对象,此时修改原列表不会影响新列表。
示例代码:

# 直接赋值的情况
B = [1,2,3]
A = B
B.append(4)
print(A) # 输出[1,2,3,4],二者同步变化

# 拷贝赋值的情况
B = [1,2,3]
A = B.copy() # 创建新的独立列表对象
B.append(4)
print(A) # 输出[1,2,3],二者互不影响

补充误区:就算是列表,如果你给B重新赋值整个新列表(比如B = [4,5,6]),也不会影响A,因为这一步是让B绑定到新的列表对象,和修改原列表内容的操作本质完全不同。

内容的提问来源于stack exchange,提问作者ShaSha-Codes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:12:03