我在python3中遇到了一个我不理解的有趣行为。我了解到,对于str、int等内置的不可变类型,它们不仅值相同(都包含“x”)的两个变量相等,而且实际上是同一个对象,这允许使用is
运算符。但是,当我使用input()函数时,它似乎创建了一个字符串对象,该对象不是同一个对象,但具有相同的值。在
下面是我的python交互式提示:
$ python
Python 3.2 (r32:88452, Feb 20 2011, 11:12:31)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = input()
test
>>> y = 'test'
>>> x is y
False
>>> x == y
True
>>> id(x)
4301225744
>>> id(y)
4301225576
为什么会这样?在
这是您的误解:关于
int
s和long
s,它只对少数值有效;对于任何类型的字符串,对于一个模块的字符串,这可能是正确的,但在其他情况下则不然。在但是there is a builtin function ^{} 它实习任何给定的字符串。在
这是因为一个实现细节-一般来说,您不能依赖}。试试这个脚本:
is
返回{这个指纹
^{pr2}$在Jython上,
is
即使在第一次打印时也返回False
。在这是正确的行为。在
但是:
^{pr2}$相关问题 更多 >
编程相关推荐