我完全坚持这个
>>> s = chr(8263)
>>> x = s[0]
>>> x is s[0]
False
Run Code Online (Sandbox Code Playgroud)
这怎么可能?这是否意味着通过索引访问字符串字符会创建相同字符的新实例?我们来试验:
>>> L = [s[0] for _ in range(1000)]
>>> len(set(L))
1
>>> ids = map(id, L)
>>> len(set(ids))
1000
>>>
Run Code Online (Sandbox Code Playgroud)
哎呀浪费字节;)或者它是否意味着str.__getitem__有一个隐藏的功能?有人可以解释一下吗?
但这并不是我的惊喜:
>>> s = chr(8263)
>>> t = s
>>> print(t is s, id(t) == id(s))
True True
Run Code Online (Sandbox Code Playgroud)
这很清楚:t是别名s,所以它们代表相同的对象和身份重合.但同样,以下是可能的:
>>> print(t[0] is s[0])
False
Run Code Online (Sandbox Code Playgroud)
s并且t是同一个对象那又怎样?
但更糟糕的是
>>> print(id(t[0]) == id(s[0]))
True
Run Code Online (Sandbox Code Playgroud)
t[0]并且s[0]没有被垃圾收集,被 …