整数是不可变的还是可变的?

Int 变量是不可变的。那么当一个整数类型被赋值给一个新的变量时,它应该创建一个新的对象,对吧?但它只会在对任一变量进行更改时创建一个新对象。整数不是不可变的吗?我错过了什么?谢谢!


x = 5

y = x

print(x is y)   #>>>True | So y is a reference.

print(y)        #>>>5


x +=1

print(x is y)   #>>>False | now y is an object? Is that it? 

print(y)        #>>>5


慕码人2483693
浏览 115回答 4
4回答

呼如林

x并且y都是参考。x = 5-x是对5y = x-y也是对5x += 1-x现在是对 的引用6,y仍然是对 的引用5

ABOUTYOU

整数是不可变的。当你写 x=5 时,x 指向一个包含 5 的内存位置。当您继续编写 y=x 时,变量 y 指向与 x 相同的位置。然后输入 x+1=6,现在 x 指向一个包含 6 的新位置,而不是之前的位置。(这里,整数仍然保持不变,因为原始整数 5 仍然存在,但变量 x 现在没有绑定到它。x 现在绑定到一个新位置。但 y 仍然绑定到整数 5)但是 y 仍然指向与 5 相同的位置。所以,整数仍然是不可变的,这就是它的工作原理。为了看得更清楚,在每一步之后使用 id(x) 或 id(y)。

慕森卡

有两件事在起作用。首先,int 是可以绑定到多个变量的对象。其次,python缓存了一小群小整数,这些小整数往往会被大量使用以提高效率x = 5       # get the cached `5` object and bind it to xy = x       # take whatever object is bound to x and also bind it to yx += 1      # take whatever object is bound to x, call its `__iadd__`             # method and bind the return value to x. `int.__iadd__`            # adds the integers and since it is small, returns the            # cached `6` object.请注意,赋值不会创建新对象。它只是将对象的引用放入变量中,就像将键/值对添加到字典中一样。

慕少森

这是一个图解说明。关键部分x += 1实际上是在内存中创建一个新对象,其值在x的旧引用加上1(6在这种情况下为 )。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python