Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的is运算符_Python_Python 3.x - Fatal编程技术网

Python中的is运算符

Python中的is运算符,python,python-3.x,Python,Python 3.x,可能重复: 我对python中的“is”运算符有疑问: >>> a = "1234" >>> b = "1234" >>> a is b True >>> a = "12 34" >>> b = "12 34" >>> a is b False 谁能解释一下为什么会这样?我也不明白,据说“is”运算符只需要比较对象的内存地址,那么表达式“a is b”是真的吗?是不是相等运算符。它检

可能重复:

我对python中的“is”运算符有疑问:

>>> a = "1234"
>>> b = "1234"
>>> a is b
True
>>> a = "12 34"
>>> b = "12 34"
>>> a is b
False

谁能解释一下为什么会这样?我也不明白,据说“is”运算符只需要比较对象的内存地址,那么表达式“a is b”是真的吗?

不是相等运算符。它检查两个变量是否引用同一个对象。如果要这样做:

a = "12 34'
b = a
那么
a是b
将是
True
,因为它们指的是同一个对象

您介绍的案例是由于Python解释器的实现细节。由于字符串是不可变的,在某些情况下,创建两个相同的字符串将产生对同一对象的引用——即,在第一种情况下,Python解释器只创建一个
“1234”
,而
a
b
都引用该对象。在第二种情况下,解释器创建两个副本。这是由于解释器创建和处理字符串的方式造成的,作为实现细节,不应依赖于。

来自:

运算符
不为
测试对象标识:
x为y
当且仅当x和y为同一对象时为真
x不是y
产生反真值

该函数在此处显示了不同之处:

>>> a = "1234"
>>> b = "1234"
>>> a is b
True
>>> id(a)
140340938833512
>>> id(b)
140340938833512

>>> a = "12 34"
>>> b = "12 34"
>>> a is b
False
>>> id(a)
140340938833568
>>> id(b)
140340938833624

is
运算符用于识别两个对象何时相同,即:在内部,它们存储在相同的存储位置

Python实现可以自由地优化不可变的对象,例如字符串、整数和其他数字,这样当一个人实例化相同的对象时,以前存在的对象就会被重用。例如,在cPython(标准实现)中,“n”个第一个整数(我不记得实际的阈值)总是作为单个实例保存在内存中,因此对于小整数,“is”总是“True”

当然,
is
运算符并不打算以这种方式使用。我们不应该关心字符串或整数是否在内部缓存(尽管甚至有一个内置函数-
intern
-提示解释器以这种方式缓存字符串或对象)


使用
is
的目的是验证一个对象是否与您在另一个位置找到的对象实际上相同。要一致地验证对象是否相等,应始终使用相等运算符
==

,这里有一个相当详细的答案:下面是另一个