14
>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> r = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> q is r
False

何文字をs1 is s2与える必要がありFalseますか?制限はどこにありますか?つまり、Pythonが文字列の個別のコピーを作成し始めるまでに、文字列の長さを尋ねています。

4

3 に答える 3

13

文字列のインターンは実装固有であり、信頼するべきではありません。2つの文字列が同一であることを確認する場合は、同等性テストを使用してください。

于 2012-05-16T16:15:00.750 に答える
12

奇妙な理由で、比較を強制的にtrueにしたい場合は、intern関数を使用します。

>>> a = intern( '12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>> b =インターン( '12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>>aはbです
真
于 2012-05-16T16:19:23.097 に答える
5

これは、CPython 2.5.0ソースファイル(stringobject.h)からのインターン文字列に関するコメントです。

/* ... ... This is generally restricted to strings that **"look like" Python identifiers**, although the intern() builtin can be used to force interning of any string ... ... */

したがって、文字列にはアンダースコアのみが含まれ、数字またはアルファベットがインターンされます。あなたの例では、qそして「rは含まれ;ているので、それらは抑留されません。

于 2014-05-09T04:01:02.807 に答える