何が起きてる?:
>>> a, b, c = ("TEST", "test", "TEST".lower())
>>> map(id, [a,b,c])
[140341845003072, 140341845003216, 140341845003264]
>>> map(str, [a,b,c])
['TEST', 'test', 'test']
>>> map(type, [a,b,c])
[<type 'str'>, <type 'str'>, <type 'str'>]
"TEST" と "TEST".lower() または "test" と "test".lower() は同じメモリ位置を共有すべきではありませんか?
編集:新しいコピーがあることはわかりましたが、2つの文字列が同じ場合、同じメモリ空間を共有すると思いました。つまり:
>>> a = "test"
>>> b = "test"
>>> map(id, (a,b))
[140341845003216, 140341845003216]
>>> a is b
True
Python 2.7.3 では、次のようになります。
>>> a = "test"
>>> a is a.lower()
False