加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:25:38 所属栏目:Python 来源:网络整理
导读:我已经有一段时间知道 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喜欢在内存中重用字符串而不是重复:

>>> 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需要检查以确保两个字符串都是等效的.如果它们没有被实现,它可以进行字符串比较,但如果它们被实现,它只需要进行指针比较,这样效率会更高一些.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读