为啥 Python 整数被实现为对象?
Posted
技术标签:
【中文标题】为啥 Python 整数被实现为对象?【英文标题】:Why are Python integers implemented as objects?为什么 Python 整数被实现为对象? 【发布时间】:2020-09-25 22:04:51 【问题描述】:为什么 Python 整数被实现为对象?
文章 Why Python is Slow: Looking Under the Hood 及其 cmets 包含有关 Python 内存模型及其影响的有用信息,尤其是性能方面。
但本文并未提出或回答为什么首先做出将整数实现为对象的决定的问题。
特别是,将 Python 称为动态类型并不是一个答案。可以将整数实现为动态类型语言中的整数。
【问题讨论】:
我认为这不是您要寻找的答案,但是 Python 在决定将所有内容都作为对象时获得了一些灵活性。例如,您可以继承int
(查看bool
)。
这能回答你的问题吗? "is" operator behaves unexpectedly with integers
不,我的问题不在于“is”运算符……我发现我用关于“is”的评论误导了人们……我现在删除了这条评论。造成任何误解,深表歉意。
@MarioIshac 感谢您对子类型的评论。但我怀疑它是否能证明如此重要的设计决定是合理的。
速度不是 Python 语言或 CPython 实现设计的首要目标。
【参考方案1】:
“Python 是一种动态类型语言”是答案之一。要知道的另一件事:python 的 int
与大多数其他语言中的整数不同。 Python int
实际上支持长算法(即可以保存大于 2^64 的值)。它速度较慢,这是不可避免的,但它为您提供了一些额外的灵活性。
至于“奇怪”的行为:不要在 python 中使用is
来比较值。 python is
所做的是检查两个变量是否指向完全相同的对象。它通过比较他们的 id 来做到这一点。大多数时候这不是你想要的。根据经验 - 仅使用 is
来检查 is None
而不是其他任何东西。
【讨论】:
谢谢,但您所说的已经在链接的文章中进行了解释。我的问题是为什么首先决定将整数实现为对象。 我从我的问题中删除了关于“是”的事后想法,以使其更加集中。以上是关于为啥 Python 整数被实现为对象?的主要内容,如果未能解决你的问题,请参考以下文章