>> id(a) 36910184L >>> b = "test" >>> id(b) 36910184L-6ren">
gpt4 book ai didi

python - 内存中从 `raw_input()` 开始的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:44 26 4
gpt4 key购买 nike

我早就知道 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 需要检查以确保两个字符串是等价的。如果它们不是 interned,它可以进行字符串比较,但如果它们是 interned,它只需要进行指针比较,这样效率更高一些。

关于python - 内存中从 `raw_input()` 开始的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14906000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com