栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有空格且末尾无空格且不可变的Python字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有空格且末尾无空格且不可变的Python字符串

这是关于CPython实现如何选择缓存字符串文字的古怪之处。具有相同内容的字符串文字可以引用相同的字符串对象,但不必如此。

'string'
恰好在时会自动被拦截,
'string'
因为并非
'string'
仅包含Python标识符中允许的字符。我不知道 为什么
这是他们选择的标准,但这是事实。在不同的Python版本或实现中,行为可能有所不同。

从CPython
2.7源代码的

stringobject.h
第28行:

中间字符串(ob_sstate)试图确保仅存在一个具有给定值的字符串对象,因此相等性测试可以是一个指针比较。尽管内置的intern()可用于强制对任何字符串进行中间化,但这通常仅限于“看起来像”
Python标识符的字符串。

您可以在中查看执行此操作的代码

Objects/preobject.c

for (i = PyTuple_Size(consts); --i >= 0; ) {    PyObject *v = PyTuple_GetItem(consts, i);    if (!PyString_Check(v))        continue;    if (!all_name_chars((unsigned char *)PyString_AS_STRING(v)))        continue;    PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));}

此外,请注意,实习是独立于Python字节码编译器合并字符串文字的独立过程。如果让编译器一起编译

a
b
赋值,例如将它们放在模块或中
ifTrue:
,则将发现
a
b
相同的字符串。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596492.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号