python - 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 的原始值?
解决方案
这两种情况比看起来更不同,这不是因为所涉及的类型。
x = 3
这会改变所关注的价值x
。重新分配x
using=
不会改变 3。右手边是 int 还是 list 都没有关系。右边的任何东西都放入左边的变量中。
x[0] = 'd'
这看起来一样,但实际上完全不同。这实际上不是简单的重新分配,而是在内部翻译为
x.__setitem__(0, 'd')
这不仅仅是一个重新分配,它实际上是一个改变对象x
所持有的可变操作。
所以后者行为不同的原因是,不是改变x
持有的对象,而是改变持有的对象本身x
。
您可以根据左侧的内容来区分这两种情况=
。如果左边是一个简单的变量名 ( x =
),它是一个简单的重新分配。如果左侧使用[]
( x[0] =
) 或任何其他类型的“访问器”语法,如.
( x.attr =
),则您正在更改x
所持有的对象。
推荐阅读
- .net - 如何在 ASP.NET Core 主机中创建 Singleton 并在创建时显式调用方法
- python - 无法在 Instagram 上打开关注者按钮
- python - ValueError('只知道如何处理PNG;安装了Pillow'',Matplotlib可以处理更多的图像')
- r - 如何根据每行中的值对数据进行透视
- javascript - 如何禁用部分 iframe 中的点击指针事件?
- matlab - matlab 组织结果,使它们不会在循环循环中覆盖
- python - Python如何知道dll函数的签名
- apache-spark - 如何从 SPARK 为 oracle 表运行 Select 语句
- entity-framework-core - EF Core 多对多关系无法与网络实体正常工作
- powerbi - 基于 Power BI 中指定值的测量列上的 CountRows