我今天被一個字符串比較弄糊塗了:看起來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