Python可变与不可变类型

Python中的变量存储和Java类似,分为可变类型与不可变类型(mutable与immutable)。这里的变指的是内存,Python中的任何东西都是object,占用一定的内存,而Python中的变量名则像一个”指针”,指向对应的一块内存空间。

Python中immutable类型有数字、字符串、Tuple:

>>> x=1
>>> id(x)
140042976655288
>>> x+=1
>>> id(x)
140042976655264

在x做加法时并不是对x指向的内存加一,而是指向了2的另一块内存。字符与Tuple也是同样。immutable类型是不可以改变的,所以HASH之后的值不变。可以用来做键值,例如字典的键。

Python中mutable类型有List、Dict、类实例:

>>> y=[1,2]
>>> id(y)
140042973080752
>>> y+=[3]
>>> id(y)
140042973080752

可以看到对y操作后的内存地址是没有改变的。这点和C语言是有点区别的:

x=1
y=x
y+=1

在C语言看来y+=1是对指向的内存进行操作,结果就是x,y共同为2。