千家信息网

python中字符串驻留与常量折叠隐藏特性是怎样的

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,python中字符串驻留与常量折叠隐藏特性是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。下面是Python字符串
千家信息网最后更新 2026年11月01日python中字符串驻留与常量折叠隐藏特性是怎样的

python中字符串驻留与常量折叠隐藏特性是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

下面是Python字符串的一些微妙的特性,绝对会让你大吃一惊。

案例一:

案例二:

案例三:

很好理解, 对吧?

说明:

这些行为是由于 Cpython 在编译优化时, 某些情况下会尝试使用已经存在的不可变对象而不是每次都创建一个新对象. (这种行为被称作字符串的驻留[string interning])

发生驻留之后, 许多变量可能指向内存中的相同字符串对象. (从而节省内存)

在上面的代码中, 字符串是隐式驻留的. 何时发生隐式驻留则取决于具体的实现. 这里有一些方法可以用来猜测字符串是否会被驻留

所有长度为 0 和长度为 1 的字符串都被驻留.

字符串在编译时被实现 ('wtf' 将被驻留, 但是 ''.join(['w', 't', 'f']) 将不会被驻留)

字符串中只包含字母,数字或下划线时将会驻留. 所以 'wtf!' 由于包含 ! 而未被驻留. 可以在【地址1】找到 CPython 对此规则的实现.

当在同一行将 a 和 b 的值设置为 "wtf!" 的时候, Python 解释器会创建一个新对象, 然后同时引用第二个变量(译: 仅适用于3.7以下, 详细情况请看【地址2】). 如果你在不同的行上进行赋值操作, 它就不会"知道"已经有一个 wtf!对象 (因为 "wtf!" 不是按照上面提到的方式被隐式驻留的). 它是一种编译器优化, 特别适用于交互式环境.\

常量折叠(constant folding) 是 Python 中的一种 窥孔优化(peephole optimization) 技术. 这意味着在编译时表达式 'a'*20会被替换为 'aaaaaaaaaaaaaaaaaaaa' 以减少运行时的时钟周期. 只有长度小于 20 的字符串才会发生常量折叠. (为啥? 想象一下由于表达式 'a'*10**10 而生成的 .pyc 文件的大小).

如果你是使用 3.7 版本中运行上述示例代码, 会发现部分代码的运行结果与注释说明相同. 这是因为在 3.7 版本中, 常量折叠已经从窥孔优化器迁移至新的 AST 优化器, 后者可以以更高的一致性来执行优化. (由 Eugene Toder 和 INADA Naoki 在 bpo-29469 和 bpo-11549 中贡献.)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

字符 字符串 对象 常量 编译 代码 案例 长度 运行 特性 相同 内存 变量 地址 对此 情况 版本 行为 表达式 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 工业互联网科技新基建 猫创互联网科技 齐家互联网科技有限公司 互联网金融科技委员会 多迪互联网科技有限公司 恒生科技互联网指数分析 汉立互联网科技有限公司联系电话 互联网系的金融科技公司 重庆威客帮互联网科技 福建科技产业互联网发展 畅思互联网科技 深圳艾果互联网通讯科技 中和天地互联网科技有限公司 长沙互联网科技 工业互联网展湾科技股份有限公司 沐思想互联网科技有限公司 启辰互联网科技 西安有哪些互联网高科技企业 互联网科技新闻 百单网互联网科技有限公司怎么样 互联网最新的科技有限公司 华宇互联网科技 海南科技产业互联网平台 福州新华互联网科技学校 知乎 荆州市昕露互联网络科技有限公司 成都互联网科技公司工作好不好 中天科技中国工业互联网 科技互联网专业务虚会材料 互联网科技创业计划的风险分析
0