#不可变类型
In [31]: id(1),id(2)
Out[31]: (4477999936, 4477999968)
In [32]: a = 1
In [33]: id(a)
Out[33]: 4477999936
In [34]: #当a赋一个新值时,变量a会绑定到新值上
In [35]: a = 3
In [36]: id(a)
Out[36]: 4478000000
#可变类型
In [38]: lst = [0]
In [39]: id(lst)
Out[39]: 4493976328
In [40]: lst = [0,1]
In [41]: id(lst)
Out[41]: 4499600328
ps:表面上看可变类型,python似乎实现了不同类型的管理方式,其实不是的。其实lst代表地址,它引用的lst[0],lst[1]的内存地址其实是变了的,因为lst就是int(此处),而int就是不可变类型。
另外,我还想延伸一下关于__new__的用法。为什么要放在这里说,待会看了这个例子就会明白。
class Word(str):
def __new__(cls, word):
word = word.replace(" ","")
return str.__new__(cls,word)
def __init__(self,word):
self.word = word
def __eq__(self, other):
return len(self)==len(other)