有人可以帮助澄清整数对象和其他一些东西

时间:2016-03-17 02:58:31

标签: python python-3.x

所以我理解Python中的所有东西都是一个对象。我也理解对象是包含信息的内存的一部分。知道这两件事让我想知道整数是如何成为对象所以我去挖掘。我发现CPython在启动时会创建从-5到256的范围。

所以,我想知道的是这是否正确,因为我找不到答案。 1是一个标识符,指向一个对象,其中存储的信息的值为1,此语句是否正确?此外,如果CPython只创建从-5到256的范围,那么高于或低于该范围的整数如何知道它们中存储的值是多少?字符串和浮点数如何知道它们中存储的值是什么?

很抱歉,如果这是一个糟糕的问题,我是编码的新手,并试图围绕术语,并了解当我执行代码行时的问题。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

整数是对象,因为一切是一个对象。如果你围绕术语位缠绕你的大脑,我建议你查看Dive Into Python中的Everything Is a Object一章。这是最相关的一点:

  

Python中的所有东西都是一个对象,几乎所有东西都有属性和方法。所有函数都有一个内置属性__doc__,它返回函数源代码中定义的doc字符串。 sys模块是一个对象,其中包含一个名为path的属性(除其他外)。等等。

     

然而,这引出了一个问题。什么是对象?不同的编程语言以不同的方式定义“对象”。在某些情况下,这意味着所有对象必须具有属性和方法;在其他情况下,这意味着所有对象都是可子类化的。在Python中,定义更宽松;一些对象既没有属性也没有方法(第3章中有更多内容),并且并非所有对象都是可子类化的(在第5章中有更多内容)。但是,从某种意义上说,一切都是一个对象,它可以被赋值给一个变量,或作为一个参数传递给一个函数(详见第4章)。

答案 1 :(得分:1)

所有Python整数都是对象。它们的值有点复杂,因为它们可以扩展以支持非常大的数字(大于大多数编程语言中可用的标准32位或64位整数)。实现是用C语言编写的,你可以找到它here。但是,您并不需要知道或关心实现的细节。 int对象的工作方式与Python中的其他所有对象非常相似。

整数-5256的缓存是另一回事。缓存避免反复重新创建相同的小整数,但缓存的1对象仍然是与未缓存的int 257类似的对象。只是每当你有一个int的值是1时,你正在处理完全相同的对象,而可能有几个值为257的对象同时存在时间。如果需要,您可以编写自己的类来执行此类缓存,只需定义一个返回该类的预先存在的实例的__new__方法。缓存是另一个您不需要关心的实现细节。如果它没有缓存任何整数,它仍然可以正常工作(它可能稍微慢一些并且使用比当前缓存实现更多的内存)。