我今天被一个字符串比较弄糊涂了:看起来python重用字符串(这是一个明智的做法,因为它们是不可变的)。为了检查这个事实,我做了以下事情:python如何做字符串魔术?
>>> a = 'xxx'
>>> b = 'xxx'
>>> a == b
True
>>> a is b
True
>>> id(a)
140141339783816
>>> id(b)
140141339783816
>>> c = 'x' * 3
>>> id(c)
140141339783816
>>> d = ''.join(['x', 'x', 'x'])
>>> id(d)
140141339704576
这有点令人惊讶。一些问题:
- 在定义新字符串时,python是否检查其字符串表的全部内容?
- 字符串大小是否有限制?
- 这种机制是如何工作的(比较字符串的散列?)
- 虽然它似乎并不适用于所有类型的生成字符串。这里的规则是什么?
'is'测试的身份,即存储位置。 '=='测试相等性。这是不明智的交替使用它们,因为一些字符串,整数等被优化的名称 – inspectorG4dget 2014-09-05 04:43:31
谢谢,但我已经知道(我没有询问任何有关它)。我的问题不是关于'is'还是'==':它关于内部python如何重用字符串。也就是说,关于python用来决定一个字符串不需要添加到其字符串表的内部实现,但它可以被重用。正如你在我的例子中看到的那样,这个机制并不适用于所有相同的字符串,所以我想了解它何时以及如何使用它。 – dangonfast 2014-09-05 04:51:36
您可能感兴趣的内容[Martijn Pieters说的](https://www.codementor.io/python-tutorial/stack-overflow-martijn-pieters-python-optimization?utf-xml:utm_source = reddit-content&utm_medium = blog&utm_term = python-tutorial-python-internals&utm_content = blog&utm_campaign = reddit-content) – inspectorG4dget 2014-09-05 04:55:49