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

Python变量赋值后修改原变量,为何y的取值存在差异?

Python变量赋值后修改的结果判断方法

你遇到的问题核心是Python中可变类型与不可变类型的区别,以及变量的底层逻辑——Python里的变量本质是指向内存对象的引用,而非直接存储数据。

关键概念区分

不可变类型(Immutable)

这类对象一旦创建就无法原地修改,若要改变值,必须生成新对象并让变量指向它:

  • 包含类型:整数(int)、字符串(str)、浮点数(float)、元组(tuple)、布尔值(bool)

可变类型(Mutable)

这类对象创建后可直接在原内存地址上修改内容,无需生成新对象:

  • 包含类型:列表(list)、字典(dict)、集合(set)

案例逻辑拆解

案例1(整数,不可变)

x = 0
y = x  # y和x指向内存中同一个整数对象0
x = 1  # 整数不可变,此处创建新对象1,x转而指向它,y仍指向原对象0
print(y)  # 输出0

案例2(列表,可变)

x = [0]
y = x  # y和x指向同一个列表对象
x[0] = 1  # 直接在原列表上修改元素,未生成新对象,y指向的仍是该列表
print(y)  # 输出[1]

案例3(字典,可变)

x = {'key':0}
y = x  # y和x指向同一个字典对象
x['key'] = 1  # 原地修改字典的value,原对象未变,y能看到修改结果
print(y)  # 输出{'key': 1}

案例4(集合,可变)

x = set()
y = x  # y和x指向同一个集合对象
x.add(1)  # 原地给集合添加元素,原对象未变,y能看到修改结果
print(y)  # 输出{1}

案例5(字符串,不可变)

x = '0'
y = x  # y和x指向同一个字符串对象'0'
x += '1'  # 字符串不可变,此处生成新字符串'01',x转而指向它,y仍指向原对象'0'
print(y)  # 输出'0'

快速判断y取值的方法

  1. 先确定原始数据D的类型是可变还是不可变
  2. 观察修改x的方式:
    • 若为重新赋值(如x = 1、字符串的x += '1'):
      • 无论类型,y都会保留原始值D(因为x指向了新对象,y仍指向原对象)
    • 若为原地修改(如x[0]=1、x['key']=1、x.add(1)):
      • 仅可变类型支持此操作,此时y会取修改后的值D'(因为x和y指向同一个对象,对象本身已被修改)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:20:16