在Python3.5中,是否可以预测何时我们将获得一个内部字符串或何时我们将获得一个副本?在阅读了关于这个问题的一些堆栈溢出的答案后,我发现this one是最有用的,但仍然不够全面。比我看的Python docs要多,但是实习在默认情况下是不保证的
Normally, the names used in Python programs are automatically interned, and the dictionaries used to hold module, class or instance attributes have interned keys.
因此,我的问题是关于内部intern()
条件,即决策(是否插入字符串文字):为什么同一段代码在一个系统上工作,而不是在另一个系统上工作,以及mentioned topic答案的作者在说
the rules for when this happens are quite convoluted
你认为有规则吗
interning的唯一规则是} 拘留:
intern
的返回值被internied。其他一切都取决于决定某段代码应该或不应该进行实习的人的突发奇想。例如,"left"
被^{这里的“规则”是,如果Python代码对象的
co_consts
中的字符串对象纯粹由在Python标识符中合法的ASCII字符组成,则该字符串对象将被扣留"left"
将被拘留,但"as,df"
不会被拘留,而且"1234"
将被拘留,即使标识符不能以数字开头。虽然标识符可以包含非ASCII字符,但此检查仍会拒绝此类字符实际标识符永远不会通过此代码;他们被无条件拘留了几行,不管有没有ASCII码。此代码可能会发生更改,并且还有很多其他代码可以进行实习或类似实习的操作问我们关于弦乐实习的“规则”就像问一位气象学家关于婚礼是否下雨的规则一样。我们可以告诉你很多关于它是如何工作的,但是它对你没有多大用处,你总是会得到惊喜
从你链接的帖子中我了解到:
当您使用
if a == b
时,您正在检查a
的值是否是b
的值,而当您使用if a is b
时,您正在检查a
和b
是否是同一对象(或共享内存中的同一位置)现在python实习常量字符串(由“blabla”定义)。 因此:
但当你这样做的时候:
在C编程语言中,使用带有
""
的字符串将使其成为const char *
。我想这就是这里正在发生的事情相关问题 更多 >
编程相关推荐