Natknąłem się na dziwne zachowanie, które dzieje się tylko w interaktywnej sesji Pythona, ale nie wtedy, gdy piszę skrypt i go wykonuję.Python: zachowanie id() w Interpreter
String jest niezmienna typ danych w Pythonie, stąd:
>>> s2='string'
>>> s1='string'
>>> s1 is s2
True
Teraz dziwne część:
>>> s1='a string'
>>> s2='a string'
>>> s1 is s2
False
Widziałem, że ma spacji w ciągu powoduje to zachowanie. Jeśli umieściłem to w skrypcie i uruchomiłem, wynik jest prawdziwy w obu przypadkach.
Czy ktoś ma o tym pojęcia? Dzięki.
EDIT:
Ok, powyższe pytanie dać kilka pomysłów. Teraz tutaj jest inny eksperyment:
>>> s2='astringbstring'
>>> s1='astringbstring'
>>> s1 is s2
True
W tym przypadku ciągi są zdecydowanie dłużej niż 'a string'
, ale nadal występują te same identyfikatory.
Zobacz ten post http://stackoverflow.com/questions/2123925/when-does-python-allocate-new-memory-for-identical-strings – isedev
Należy pamiętać, że zasady interning mogą się różnić w poprzek implementacjach Python i wersjach. Oprócz idiomatycznego 'jest [nie] przypadku" use "jest niezwykle rzadkie w Pythonie; powinieneś go używać tylko wtedy, gdy naprawdę interesujesz się tożsamością obiektu, a nie równością wartości. –