Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能帮助澄清整数对象和其他一些事情吗_Python_Python 3.x - Fatal编程技术网

Python 有人能帮助澄清整数对象和其他一些事情吗

Python 有人能帮助澄清整数对象和其他一些事情吗,python,python-3.x,Python,Python 3.x,所以我知道Python中的一切都是对象。我也知道对象是内存中包含信息的一部分。知道了这两件事让我想知道整数是如何成为对象的,所以我开始挖掘。我发现CPython在启动时会创建一个从-5到256的范围 所以,我想知道这是否正确,因为我找不到答案1是一个标识符,它指向一个对象,其中存储的信息值为1,该语句正确吗?另外,如果CPython只创建一个从-5到256的范围,那么高于或低于该范围的整数如何知道其中存储了什么值?字符串和浮点数如何知道存储在其中的值 很抱歉,如果这是一个糟糕的问题,我是一个新的

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

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


很抱歉,如果这是一个糟糕的问题,我是一个新的编码和试图把我的头周围的术语,并了解发生了什么,当我执行代码行。提前感谢您的帮助。

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


整数
-5
256
的缓存是另一回事。缓存可以避免反复重新创建相同的小整数,但是缓存的
1
对象仍然是与未缓存的
int
类似的
257
对象类型相同的对象。只是每次你有一个
int
谁的值是
1
,你就在处理一个完全相同的对象,而可能同时存在多个值为
257
的对象。如果需要,您可以编写自己的类来执行这种缓存,只需定义一个
\uuuuu new\uuuu
方法,该方法返回该类的一个预先存在的实例。缓存是您实际上不需要关心的另一个实现细节。如果Python不缓存任何整数,它仍然可以正常工作(它可能会比当前缓存的实现慢一点,并且使用更多的内存)。

整数是对象,因为一切都是对象。如果你把你的大脑围绕在术语上,我建议你看看《一切都是对象》一章。以下是最相关的一点:

Python中的所有东西都是对象,几乎所有东西都有属性和方法。所有函数都有一个内置属性
\uuuu doc\uuu
,该属性返回函数源代码中定义的文档字符串。
sys
模块是一个对象,它具有一个名为
path
的属性。等等

尽管如此,这还是回避了一个问题。什么是物体?不同的编程语言以不同的方式定义“对象”。在某些情况下,这意味着所有对象都必须具有属性和方法;在其他情况下,这意味着所有对象都是子类的。在Python中,定义更宽松;有些对象既没有属性也没有方法(第3章对此进行了详细介绍),并且并非所有对象都是子类的(第5章对此进行了详细介绍)。但从某种意义上说,一切都是一个对象,它可以指定给变量,也可以作为参数传递给函数(第4章将对此进行详细介绍)


如果你对编码还不熟悉,我认为你对细节看得太远了:)可能是这样,但我是个好奇的人,hahaI在谷歌上搜索过,但到目前为止没有提到你的神奇数字“-5”和“256”。“创建一个范围”。。。什么的?此外,CPython如何管理内存既不相关,也可能会在不通知的情况下更改。除非您是CPython开发人员。@Muposat此链接是我获取这些数字的来源。这意味着,当您在该范围内创建int时,CPython只在其秘密缓存中使用指向该值的指针。对于超出该范围的整数,它实际上分配内存,写下整数,并使用指向该内存的指针访问整数。这是它们的内部优化,既不可移植,也可能更改。