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

为何Python中列表赋值后修改原对象会影响新变量,整数赋值却不会?

Python中列表与整数赋值的行为差异解析

先看你给出的代码示例:

a = [1, 2]
b = a
a.append(3)
print(b) # 输出 [1, 2, 3],表明b发生变化
c = 4
d = c
c = 8
print(d) # 输出4,表明d未发生变化

这事儿说穿了就是Python里可变对象和不可变对象的核心区别,我给你唠明白:

  • 首先得纠正一个常见误区:Python里的变量不是“装东西的盒子”,更像是贴在对象上的标签。
  • 先聊列表的情况:
    当你写a = [1,2]时,Python在内存里创建了一个列表对象[1,2],然后把标签a贴在了这个对象上。
    执行b = a的时候,并没有复制这个列表,只是给同一个列表对象多贴了一个标签b——现在a和b指向的是完全同一个内存地址里的列表。
    调用a.append(3)的时候,你是在直接修改这个列表对象本身的内容,不是给a换一个新列表。所以不管你通过a还是b去访问这个列表,看到的都是修改后的结果,毕竟它们指的是同一个东西嘛。
  • 再看整数的情况:
    c = 4是创建了整数对象4,把标签c贴上去。d = c同样是给这个4加了个新标签d。
    但整数属于不可变对象——你没法直接修改4这个对象本身的值。当你执行c = 8时,其实是Python创建了一个全新的整数对象8,然后把标签c从原来的4上撕下来,重新贴到8上。而d还稳稳贴在原来的4上,所以print(d)输出的还是4。

简单总结:

  • 像列表、字典、集合这类可变对象,赋值操作是让多个变量共享同一个对象,修改对象的内容会影响所有指向它的变量。
  • 像整数、字符串、元组这类不可变对象,你没法修改原对象本身,赋值操作本质是给变量重新绑定到新对象,旧的变量不会受到影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:59:28