首页 > 解决方案 > X = Y = 列表与数字

问题描述

在 python 中:当我修改值时,我有 2 段代码表现不同:

X = Y = 数字

x = y = 2
x = 3

print(x)
print(y)

Output:
3
2

X = Y = [列表]

x = y = ['a','b']
x[0] = 'd'

print(x)
print(y)

Output:
['d', 'b']
['d', 'b']

如果 X 改变,为什么 LISTS 不尊重变量 Y 的原始值?

标签: pythonlist

解决方案


这两种情况比看起来更不同,这不是因为所涉及的类型。

x = 3

这会改变所关注的价值x。重新分配xusing=不会改变 3。右手边是 int 还是 list 都没有关系。右边的任何东西都放入左边的变量中。

x[0] = 'd'

这看起来一样,但实际上完全不同。这实际上不是简单的重新分配,而是在内部翻译为

x.__setitem__(0, 'd')

这不仅仅是一个重新分配,它实际上是一个改变对象x所持有的可变操作。

所以后者行为不同的原因是,不是改变x持有的对象,而是改变持有的对象本身x

您可以根据左侧的内容来区分这两种情况=。如果左边是一个简单的变量名 ( x =),它是一个简单的重新分配。如果左侧使用[]( x[0] =) 或任何其他类型的“访问器”语法,如.( x.attr =),则您正在更改x所持有的对象。


推荐阅读