小能豆

如何在两个不同的内存位置创建 int 1?

py

我想向大家展示如何使用is而不是==来比较整数会失败。我以为这会起作用,但事实并非如此:

>>> import copy
>>> x = 1
>>> y = copy.deepcopy(x)
>>> x is y
True

对于更大的整数,我可以轻松地做到这一点:

>>> x = 500
>>> y = 500
>>> x is y
False

我怎样才能用较小的整数来演示同样的事情(这些整数通常用于 Python 中类似枚举的目的)?


阅读 16

收藏
2024-10-28

共1个答案

小能豆

is为了演示小整数的和之间的区别==,您需要重点关注创建is由于 Python 的驻留行为可能无法提供预期结果的情况。由于小整数(通常在 -5 到 256 范围内)被驻留,因此即使您使用 ,它们也会引用同一个对象copy.deepcopy

下面介绍如何用整数有效地演示这种行为:

  1. 使用类似枚举的方法:您可以使用自定义类创建一个简单的类似枚举的结构,在自定义类中定义一些整数常量,确保这些值不会被拘禁。
  2. 示例代码:您可以这样设置:
class MyEnum:
    VALUE1 = 1
    VALUE2 = 2

# Create instances
x = MyEnum.VALUE1
y = MyEnum.VALUE1

print(x is y)  # This will print True because they reference the same attribute.

# Now let's create a new instance explicitly
x_new = int(1)  # This will be a separate object
y_new = int(1)

print(x_new is y_new)  # This will print False, since they are not the same object.
print(x_new == y_new)  # This will print True, since they are equal in value.

演示摘要

  • 第 一个 比较 ( x is y) 将显示对同一类属性的两个引用产生True
  • 第二个比较(x_new is y_new)将证明两个独立的整数对象(用 创建int(1))是不同的,False使用 时会产生is,但值仍然相等,True用 时会产生==

这个例子清楚地说明了区别,并强调了使用==值比较的重要性。

2024-10-28