python中有一个比较有意思的地方,变量是指向某一个数据的地址的,改变数据就是改变指向就行了。而在c语言等中,一个变量的地址是不变的,变量的值改变只是这个地址里面的内存数据发生变化。
比如
>>> a = 1 >>> id(a) 22862960 >>> a = 2 >>> id(a) 22862948
但是呢
>>> a = 1 >>> b = a >>> b += 1 >>> a 1 >>> b 2 >>>
python里面的类型其实也分为immutable和mutable二种,之所以会导致上面的现象,就是因为常数是immutable类型,回想之前说python任何数据都是对象,既然1,2也是对象,而且还是immutable,当然不能被b修改,所以会为b重新开辟空间存放这个immutable的对象2。
那好,如果a是一个mutable的引用呢?
>>> a = [1, 2] >>> b = a >>> b += [3] >>> a [1, 2, 3] >>> b [1, 2, 3] >>> id(a) 27814608 >>> id(b) 27814608 >>>
这里并没有开辟新的内存,不需要作何解释了。
那么在python那些是immutable呢?
numbers, strings, tuples, frozensets