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

为何第一种场景变量值改变,第二种却未变?是否因列表是全局变量?

代码示例

lst1 = [1, 2, 3, 14, 33, 1, 9]
lst2 = lst1
lst2.append(789)
print(lst1, lst2, sep='\n')

a = 100
c = a
c += 1
print(a)

问题

为何第一种情况中的变量发生了变化,第二种情况却没有?这是因为列表是全局变量吗?

解答

这和全局变量完全无关,核心是Python里可变对象与不可变对象的特性差异:

  • 列表属于可变对象:执行lst2 = lst1时,并没有复制出一个新列表,只是让lst2和lst1指向内存里同一个列表对象。所以用lst2调用append修改列表,本质是改动了这个共享的对象,lst1作为指向同一对象的变量,自然会同步看到变化。
  • 整数属于不可变对象:a = 100创建了一个整数对象,c = a让c指向这个对象。但执行c += 1时,因为整数对象无法被修改,Python会新建一个值为101的整数对象,然后让c指向这个新对象。原来的100对象没被改动,所以a的值还是100。

总结:可变对象的赋值是引用传递,修改操作会影响所有指向它的变量;不可变对象的赋值是值传递,修改操作会生成新对象,不会影响原变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:48:14