【发布时间】:2014-02-07 19:19:49
【问题描述】:
我了解到,在一些不可变类中,__new__ 可能会返回一个现有实例——这就是 int、str 和 tuple 类型有时对小值所做的事情。
但是为什么下面两个sn-ps的行为不同呢?
末尾有一个空格:
>>> a = 'string '
>>> b = 'string '
>>> a is b
False
没有空格:
>>> c = 'string'
>>> d = 'string'
>>> c is d
True
空间为什么会带来差异?
【问题讨论】:
-
对不起。不可重现:)
-
你是在 python 交互式 shell 还是 scrip.py 中,在 script.py 中它返回相同的结果,所以我认为在编译代码时发生了一些事情。因为在迭代 shell 中,当我们按下回车时,每一行都会被编译。
-
另外,
a='st '; b='st '; a is b给了True -
关键字:可能。
__new__可能返回对具有相同值的现有对象的缓存引用。不保证这样做。 (不过,我确实在 CPython 3.2.3 64 位上重现了这种行为。) -
并使它们在多行的函数中仍然打印
True
标签: python string immutability cpython python-internals