Python中a,b = 0,0与a=b=0、a,b=[],[]与a=b=[]是否存在语义差异?
Python两种赋值方式的语义差异解答
1. a, b, = 0, 0 与 a = b = 0 是否语义完全等同?
二者并不完全语义等同,仅因为整数是不可变类型,最终操作表现无明显差异,核心语义区别如下:
a = b = 0属于链式赋值:执行逻辑是先获取整数0的对象引用,再按从右到左的顺序依次赋值给b和a,两个变量绑定的是同一个对象的引用a, b, = 0, 0属于序列解包赋值:执行逻辑是先将右侧的0, 0封装为元组完成整体求值,再将元组内的两个元素依次绑定到a和b,属于两次独立的赋值操作
注:你观察到的两个变量取值一致的现象,部分来源于Python对小整数的缓存复用优化,不属于语法层面的强制规定。
2. a, b, = [], [] 和 a = b = [] 的具体差异
二者差异非常明显,核心区别为是否绑定同一个可变对象:
a, b, = [], []:右侧会先后创建两个完全独立的空列表对象,分别赋值给a和b,修改其中任意一个列表的内容都不会影响另一个,执行示例:a, b, = [], [] a.append(1) print(a) # 输出:[1] print(b) # 输出:[]a = b = []:右侧仅会创建一个空列表对象,a和b都绑定到该对象的同一份引用,修改任意一个变量指向的列表,另一个变量的取值也会同步变化,执行示例:a = b = [] a.append(1) print(a) # 输出:[1] print(b) # 输出:[1]
内容的提问来源于stack exchange,提问作者GoldinGuy
相关产品推荐
相关产品推荐

