在python中
>>> a = 5
>>> a is 5
True
@H_502_7@
但
>>> a = 500
>>> a is 500
False
@H_502_7@
这是因为它将低整数存储为单个地址.但是一旦数字开始变得复杂,每个int都会获得自己唯一的地址空间.这对我来说很有意义.
The current implementation keeps an array of integer objects for all integers between -5 and 256,when you create an int in that range you actually just get back a reference to the existing object.
@H_502_24@所以现在,为什么这不适用于字符串?字符串是不是像大整数一样复杂(如果不是更多)?
>>> a = '1234567' >>> a is '1234567' True @H_502_7@
python如何有效地为所有字符串文字使用相同的地址?它不能像数字一样保留每个可能字符串的数组.
最佳答案
它不存储所有可能字符串的数组,而是有一个哈希表,指向所有当前声明的字符串的内存地址,由字符串的哈希索引.
例如
当你说a =’foo’时,它首先散列字符串foo并检查哈希表中是否已经存在一个条目.如果是,则变量a现在引用该地址.
如果表中没有找到任何条目,python会分配内存来存储字符串,哈希foo并在表中添加一个条目,其中包含已分配内存的地址.
看到:
> How is the ‘is’ keyword implemented in Python?
> https://en.wikipedia.org/wiki/String_interning