python – 内存中来自`raw_input()`的字符串

我已经有一段时间知道
Python喜欢在内存中重用字符串而不是重复:

>>> a = "test"
>>> id(a)
36910184L
>>> b = "test"
>>> id(b)
36910184L

但是,我最近发现从raw_input()返回的字符串不遵循典型的优化模式:

>>> a = "test"
>>> id(a)
36910184L
>>> c = raw_input()
test
>>> id(c)
45582816L

我很好奇为什么会这样呢?有技术原因吗?

最佳答案 对我来说,似乎python实习字符串文字,但通过其他一些进程创建的字符串不会被实现:

>>> s = 'ab'
>>> id(s)
952080
>>> g = 'a' if True else 'c'
>>> g += 'b'
>>> g
'ab'
>>> id(g)
951336

当然,raw_input在不使用字符串文字的情况下创建新字符串,因此假设它不具有相同的id是完全可行的.有(至少)两个原因,为什么C-python实习字符串 – 内存(如果你不存储同一件事的一大堆副本,你可以保存一堆)和散列冲突的分辨率.如果2个字符串散列到相同的值(例如在字典查找中),则python需要检查以确保两个字符串都是等效的.如果它们没有被实现,它可以进行字符串比较,但如果它们被实现,它只需要进行指针比较,这样效率会更高一些.

点赞