python运算结果_在python中进行减法运算时得到奇怪的结果

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Python is operator behaves unexpectedly with integers

Why (0-6) is -6 = False?

>>> (0 - 10) is -10

False

>>> (0 - 5) is -5

True

有人能解释一下我,在相同情况下,如何在一种情况下得到False,在另一种情况下得到True。

更奇怪...

>>> (0 - 10) is (0 - 10)

False

另请参见Python" is"运算符的行为异常

请勿使用is进行相等性测试-它是身份运算符,并且两个相等的对象不一定相同(即,位于计算机内存中的同一地址下)。可能会缓存和重用一些小整数,但并非全部都被缓存,这就是为什么您在这里看到不同结果的原因。

此外,此行为与实现有关,因此您不能总是这样。

从文档:

当前的实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建int时,实际上实际上是返回对现有对象的引用。因此应该可以更改1的值。我怀疑在这种情况下Python的行为是不确定的。 :-)

根据我的经验:在我的Python2.7中,(0 + x) is x为x返回True,介于-5和+256之间,以及False在其他位置。

很好...不知道:)

is运算符将确定两个对象是否具有相同的标识(按低级术语,它们的表示形式是否在内存中位于相同的地址)。

a = object()

a is a

True

在Python中,数字就像其他对象一样是对象,因此is是否起作用取决于您如何创建它们。

a = 0

a is a

True

您的代码在一种情况下有效而在另一种情况下无效的原因是Python会实习小的整数;也就是说,它不会为-5创建新的数字对象,而是会保留小整数的缓存并为您提供适当的数字对象。另一方面,在您未设置-10的情况下,Python每次都必须创建一个新的数字对象。

被禁入的其他对象包括短字符串(包括单字符字符串)以及True和`False。

您不应该依赖实习。应该使用==运算符代替is。

您正在创建int的实例,并期望它们都是同一对象。对于大多数其他对象,这通常根本不起作用,因此,您完全得到True也许应该令人惊讶。

这样做的原因是Python在启动时会创建一堆经常使用的整数对象,可以在需要它们时重用它们。之所以可行,是因为int是不可变的,但这只是一种优化。

可能存在一些实现优化,可能会重用同一数字对象。

我会说这就是为什么有时会出现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值