这些以下任务之间有什么区别?

时间:2018-12-17 10:11:11

标签: python-3.x

示例1:

bush2Image.src = 'bush2.png';

Example2:

>>>a,b='a-b','a-b'
>>>a is b
True

这里,示例1和示例2显示了不同的结果。 有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

is运算符检查变量的身份。即id(var)is运算符不检查是否相等,而是检查身份。因此,在您的情况下,这两个变量都指向相同的内存位置。您可以使用id看到它。

>>> a='a-b';b='a-b'
>>> a is b
True
>>> id(a)
2885821331920
>>> id(b)
2885821331920

因此Python仅对两个immutable变量使用相同的内存位置,而不是创建新的内存位置以减少内存浪费。

对于您的情况,在第一个示例中,它分配了相同的标识,而在第二个示例中,它没有分配相同的标识。

一旦更改了变量的值,它的内存位置就会更改,并且会发生这种情况。

>>> b = 'new' # Changing value
>>> id(a)
2885821331920
>>> id(b)
2885782761064
>>> a is b
False

如果您正确地想测试是否相等,那么使用==运算符可能会更好。