为什么 Online Python Tutor 将这个不可变整数以图形方式呈现为两个不同的整数?
Why does Online Python Tutor present this immutable integer as two different integers graphically?
在 Fluent Python 中,作者 Luciano Ramalho,第 8 章,默认情况下副本很浅,有一个示例:
>>> listOne = [3, [55, 44], (7, 8, 9)]
>>> listTwo = list(listOne)
>>> listTwo
[3, [55, 44], (7, 8, 9)]
>>> listTwo == listOne
True
>>> listTwo is listOne
False
作者建议我们应该运行使用Online Python Tutor 来通过这段代码一步一步地看到底发生了什么。
我使用 Online Python Tutor 执行了前两行,这是我得到的屏幕截图:
让我困惑的是:
每个列表中的所有三个元素,不可变整数,列表和元组实际上是相同的,例如
listOne[0] is listTwo[0] #True
listOne[1] is listTwo[1] #True
listOne[2] is listTwo[2] #True
那么为什么图表在各自列表的开头显示两个单独的 3?
这里是CPythonoptimization。这可能不会出现在其他 Python 实现中。
x = 256
x is 256 # True
x = 257
x is 257 # False
OnlinePythonTutor 的开发人员做出了这个决定,记录在 Unsupported features 下,因为这不是保证的语言功能,而是特定于实现的:
Python
for strings and numbers, you can't rely on the behaviors of
id()
or is
matching CPython on your computer; when teaching beginners,
you shouldn't rely on these behaviors since they are
implementation-specific optimizations. for details, see GitHub issues
here and here and here
您可以从 issue 255 中看出整数的行为过去是不同的,即使在 -5 到 256 范围之外也是如此。
在 Fluent Python 中,作者 Luciano Ramalho,第 8 章,默认情况下副本很浅,有一个示例:
>>> listOne = [3, [55, 44], (7, 8, 9)]
>>> listTwo = list(listOne)
>>> listTwo
[3, [55, 44], (7, 8, 9)]
>>> listTwo == listOne
True
>>> listTwo is listOne
False
作者建议我们应该运行使用Online Python Tutor 来通过这段代码一步一步地看到底发生了什么。
我使用 Online Python Tutor 执行了前两行,这是我得到的屏幕截图:
让我困惑的是:
每个列表中的所有三个元素,不可变整数,列表和元组实际上是相同的,例如
listOne[0] is listTwo[0] #True
listOne[1] is listTwo[1] #True
listOne[2] is listTwo[2] #True
那么为什么图表在各自列表的开头显示两个单独的 3?
这里是CPythonoptimization。这可能不会出现在其他 Python 实现中。
x = 256
x is 256 # True
x = 257
x is 257 # False
OnlinePythonTutor 的开发人员做出了这个决定,记录在 Unsupported features 下,因为这不是保证的语言功能,而是特定于实现的:
Python
for strings and numbers, you can't rely on the behaviors of
id()
oris
matching CPython on your computer; when teaching beginners, you shouldn't rely on these behaviors since they are implementation-specific optimizations. for details, see GitHub issues here and here and here
您可以从 issue 255 中看出整数的行为过去是不同的,即使在 -5 到 256 范围之外也是如此。