为什么一个值改变但第二个值没有改变?

康刚
a = [ 1, 2 ]
b = a
a.append(3)
print(b) # shows [ 1 2 3 ] which means b changed

c = 4
d = c
c = 8
print(d) # shows 4 which means d did not change

为什么b改变了,而d没有改变?.append更改了存储在b中的值,但c = 8并未更改d中的值

彼特BG

这完全取决于您分配的对象是mutable还是immutable

简而言之-可变对象创建后就可以更改,不可变对象则不能。

考虑到您有一个a分配给对象的变量,当您将新变量指向该a变量时,有两种可能性:

  1. 如果对象是mutable->您将使用新变量指向同一对象
  2. 如果对象是immutable->,则将新对象分配给新变量。

您的第一种情况:

  • 首先,创建一个列表a,这是一个可变对象
  • 然后,使用第二个变量b指向同一列表对象。
  • 更改值时,只需更改两个变量都指向的可变对象。

在第二种情况下:

  • 首先,您将变量分配给c不可变int=4对象。
  • 然后将其分配给第二个变量d
  • 接下来,您将为int=8变量分配一个新的不可变对象c

有很多关于对象可变的含义的文章,例如:https : //medium.com/@meghamohan/mutable-and-immutable-side-of-python-c2145cf72747

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么第二个 scanf 也改变了第一个 scanf 中呈现的变量?

同一个方法改变两个状态,一个变第二个不,为什么?

为什么我的循环没有迭代列表中的第二个相同的值?

查找没有第二个值的值

查询具有一个元值但没有第二个元值的项目

在一个组件的状态改变时重新渲染第二个组件

为什么第二个频道没有从上一个频道接收数据

为什么第二个参数没有根据第一个参数进行过滤?

为什么第二个变量在字段中不改变?

为什么将第二个值放入此C结构的数组会导致第一个插槽的值变得乱码?

为什么第一个 console.log() 打印未定义的值但第二个已经转换了值

我在第一个下拉列表中保留了选择选项值,但没有保留第二个或第三个

根据第二个值找到内部数组的第一个值

查找第一个值并返回列表中的第二个值

查找第二个最近的值总是返回最后一个最近的值

用倒数第二个值替换每行的最后一个值

根据第二个值返回数组的第一个值

在第二个查询的值中使用第一个查询的值

在 Array 中查找一个值并返回第二个值

为什么我的 2 函数没有在第一个和第二个循环中被调用?

当它们没有相同的高度时,为什么第一个跨度位于第二个跨度的底部?

为什么没有在第二个参数上只在第一个参数上进行类型检查?

为什么第一个Docker exec中缺少文件,而第二个Docker exec中却没有文件?

为什么第二个装饰工在完成第一个装饰工之前没有完成工作?

为什么在引用第二个字段时,该值取自第一个字段?

为什么将await运算符用于方法的第二个参数会影响第一个参数的值?

为什么用推入移位数组将最后一个值复制到倒数第二个元素?

为什么TimeSerial不能为负的第二个值计算正确的值?

为什么我的第一个snippit有效,而我的第二个却无效?