Tan*_*Woo 1 python mutable immutability variable-assignment
我看到一篇关于不可变对象的文章.
它表示何时:
variable = immutable
将不可变赋值给变量.
例如
a = b # b is a immutable
它在这种情况下a
指的是a copy of b
,而不是reference to b
.如果是mutable
,那么a
就是a reference to b
所以:
a = 10
b = a
a =20
print (b) #b still is 10
Run Code Online (Sandbox Code Playgroud)
但在这种情况下:
a = 10
b = 10
a is b # return True
print id(10)
print id(a)
print id(b) # id(a) == id(b) == id(10)
Run Code Online (Sandbox Code Playgroud)
if a
是副本10
,b
也是副本10
,为什么id(a) == id(b) == id(10)?
虽然那篇文章对于某些语言可能是正确的,但对于Python来说却是错误的.
在Python中进行任何正常分配时:
some_name = some_name_or_object
Run Code Online (Sandbox Code Playgroud)
你没有复制任何东西.您只是将名称指向作业右侧的对象.
可变性无关紧要.
更具体地说,原因是:
a = 10
b = 10
a is b
Run Code Online (Sandbox Code Playgroud)
是True
,这10
是实习 - 意味着Python 10
在内存中保留一个,以及设置为10
指向同一个的任何东西10
.
如果你这样做
a = object()
b = object()
a is b
Run Code Online (Sandbox Code Playgroud)
你会得到的False
,但是
a = object()
b = a
a is b
Run Code Online (Sandbox Code Playgroud)
仍然会True
.
“简单”的不可变文字(特别是 -1 到 255 之间的整数)是interned,这意味着即使绑定到不同的名称,它们仍然是同一个对象。
>>> a = 'foo'
>>> b = 'foo'
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)