在python中进行减法操作时得到奇怪的结果
可能重复:在python中进行减法操作时得到奇怪的结果,python,Python,可能重复: 有谁能解释我,我是如何在一种情况下变假,在另一种情况下变真的,因为同样的操纵 更奇怪的是 >>> (0 - 10) is (0 - 10) False 不要使用is进行相等性测试-它是identity操作符,两个相等的对象不一定完全相同(即位于计算机内存中的同一地址下)。一些小整数可以被缓存和重用,但不是全部,这就是为什么您在这里看到不同的结果 此外,此行为取决于实现,因此您不能总是依赖于此。不要使用is进行相等性测试-它是标识运算符,两个相等的对象不一定相同
有谁能解释我,我是如何在一种情况下变假,在另一种情况下变真的,因为同样的操纵 更奇怪的是
>>> (0 - 10) is (0 - 10)
False
不要使用
is
进行相等性测试-它是identity操作符,两个相等的对象不一定完全相同(即位于计算机内存中的同一地址下)。一些小整数可以被缓存和重用,但不是全部,这就是为什么您在这里看到不同的结果
此外,此行为取决于实现,因此您不能总是依赖于此。不要使用
is
进行相等性测试-它是标识运算符,两个相等的对象不一定相同(即位于计算机内存中的同一地址下)。一些小整数可以被缓存和重用,但不是全部,这就是为什么您在这里看到不同的结果
此外,此行为取决于实现,因此您不能总是依赖于这种情况。来自:
当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用。因此,应该可以更改1的值。我怀疑Python在本例中的行为是未定义的。:-)
根据我的经验:在我的Python2.7中,(0+x)是x
返回True
,表示x
介于-5
和+256
之间,其他地方的为False
当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用。因此,应该可以更改1的值。我怀疑Python在本例中的行为是未定义的。:-)
根据我的经验:在我的Python2.7中,
(0+x)是x
返回True
的x
介于-5
和+256
之间,其他地方的为False
。您正在创建int
的实例,并希望它们都是同一个对象。对于大多数其他对象,这通常根本不起作用,因此您可能会惊讶地发现True
原因是Python在启动时创建了一组常用的整数对象,可以在需要时重用它们。这是可行的,因为
int
是不可变的,但只是一种优化。您正在创建int
的实例,并希望它们都是相同的对象。对于大多数其他对象,这通常根本不起作用,因此您可能会惊讶地发现True
原因是Python在启动时创建了一组常用的整数对象,可以在需要时重用它们。这算是正常的,因为
int
是不可变的,但只是一种优化。is操作符将确定两个对象是否具有相同的标识(在低级术语中,它们的表示是否在内存中的相同地址)
在Python中,数字和其他对象一样都是对象,因此是否有效取决于您如何创建它们
a = 0
a is a
True
代码在一种情况下工作而在另一种情况下不工作的原因是Python实习小整数;也就是说,它不会为-5
创建一个新的数字对象,而是保留一个小整数缓存,并为您提供适当的数字对象。另一方面,在您的情况下,-10
不是实习生,因此Python每次都必须创建一个新的number对象
插入的其他对象包括短字符串(包括单字符串)和True
和`False
你不应该依赖实习;您应该使用=
操作符来代替is
。is
操作符将确定两个对象是否具有相同的标识(在低级术语中,它们的表示是否位于内存中的相同地址)
在Python中,数字和其他对象一样都是对象,因此是否有效取决于您如何创建它们
a = 0
a is a
True
代码在一种情况下工作而在另一种情况下不工作的原因是Python实习小整数;也就是说,它不会为-5
创建一个新的数字对象,而是保留一个小整数缓存,并为您提供适当的数字对象。另一方面,在您的情况下,-10
不是实习生,因此Python每次都必须创建一个新的number对象
插入的其他对象包括短字符串(包括单字符串)和True
和`False
你不应该依赖实习;您应该使用=
操作符,而不是is
。可能有一些实现优化,可以重用相同的数字对象
我想说这就是为什么有时候你会得到正确的
$ python3
Python 3.2.3 (default, May 3 2012, 15:51:42)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> id(3)
9357472
>>> id(3)
9357472
我认为您正在寻找与=
相等的检查:
>>> 3 is 3 # Result may depend on implementation details
True
>>> 3 == 3 # Always True
True
可能有一些实现优化可能会重用相同的数字对象
我想说这就是为什么有时候你会得到正确的
$ python3
Python 3.2.3 (default, May 3 2012, 15:51:42)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> id(3)
9357472
>>> id(3)
9357472
我认为您正在寻找与=
相等的检查:
>>> 3 is 3 # Result may depend on implementation details
True
>>> 3 == 3 # Always True
True
也见也见