当前位置: 首页 > 网络应用技术

Python看对象有多少内存(查看对象的内存地址)

时间:2023-03-09 12:06:25 网络应用技术

  本文将告诉您Python看着目标的内存多少,知识点与Python查看对象的内存地址相对应。我希望这对您有帮助。不要忘记收集此网站。

  本文目录清单:

  1. Python对象2. Python内存占用分析工具工具3.使用Sys.GetSizeOf查看Python对象的内存占用4.如何估计Python对象的内存5. Python Creation类占据内存。,无论是值,字符串,函数还是类型,类,类,都是对象。

  对象是堆上的结构化结构。我们定义的所有变量和函数都存储在堆内存中,变量名称和函数名称是对堆栈中存储并指向堆的特定结构的引用。

  要深入了解Python,您首先需要了解Python对象的定义。

  我们通常说的Python是Cpython,底层由C语言实现,源代码地址:CPYTHON [GITHUB]

  python对象的定义位于include/object.h中。这是一种称为PyObject的结构:

  Python中的所有对象均从Pyobejct继承。PyObject包含垃圾回收的两条链接列表。

  从pyobejct的注释中,我们可以看到这样的句子:指向变量 - 尺寸python对象的可怜的指针也可以转换为pyvarobject*(在以下内容中可以解释pyvarobject*(可变 - 尺寸尺寸python对象).pyvarobejct)。根据PyObject存储存储元素的数量:

  在PyObject结构中,还有一个类型的对象指针OB_TYPE,用于表示哪种类型的Python对象。定义Python对象类型是PyTypeObject接口正文

  实际定义是_typeobject,位于include/cpython/object.h:

  在这种类型的对象中,不仅是对象的类型,还包括分配内存,对象标准操作等信息,它们主要分为:

  以python中的int类型为例,int类型对象的定义如下:

  从pyobject的定义来看,我们知道每个对象的ob_type必须指向特定类型对象,例如数值对象100,其ob_type将指向int类型对象pylong_type。

  Pytypeobject结构的第一行是PyObject_var_head宏。检查宏定义。

  换句话说,在最终分析中,类型的类型也是对象,并且还有一个ob_type属性。Pylong_type的ob_type是什么?

  返回到pyvarobject_head_init(pytype_type,0)的第一行,返回Pylong_type的定义,检查相应的宏定义

  从上面的关系中,我们可以知道pyvarobject_head_init(pytype_type,0)= {_pyobject_extra_init 1,pytype_type} 0} 0} 0}

  这很清楚。Pylong_type的类型是Pytype_typ。可以看出,python类型对象的类型是pytype_type,而pytype_type对象的类型本身本身本身本身

  从上面的内容中,我们知道对象和对象类型的定义,因此根据定义,对象可以具有以下两个类别

  Python对象用PyObject和PyvarObject定义。因此,根据对象大小是否是可变的,可以将python对象分为变量对象(长期对象)和无法变量对象(固定 - 长度对象)。

  原始对象a的大小没有更改,但是引用的对象已更改。对象A和对象B此处是固定长度对象

  可以看出,可变l仍指向对象A,但是对象A的内容已更改,并且数据量已更大。请注意,这里是一个长对象

  由于上述特征,这两个对象的使用将带来区别:

  状态s2 = s,修改s:s ='新字符串'的值,s2的值不会一起变化,因为s2指向一个新对象,s2的旧对象的值不会更改尚未更改的旧对象。

  说明L2 = L的值。修改L:L.Append(6)的值。目前,L2的值将共同变化,因为L和L2指向同一对象,并且对象的内容由L。

  此外,对于字符串对象,Python还具有一组内存重用机制。如果两个字符串变量变量是相同的值,它们将共享相同的对象:

  对于数值对象,Python将在0到2 8内创建一个整数对象,即,共享0至256之间的数值对象:

  根据Python数据类型,可以将对象分为以下类别:

  有两种方法可以在Python,通用API和类型相关的API中创建对象

  这种类型的API通常以pyobject_xxx命名。它可以应用于任何Python对象,例如:

  使用pyobjecg_new创建一个数值对象:

  这种类型的API通常仅作用于一种类型的对象,例如:

  使用Pylong_fromlong创建一个数值对象:

  当我们使用Python声明变量时,无需将类型分配给变量。分配变量时,我们可以分配任何类型数据,例如:::

  从Python对象的定义来看,我们已经可以知道这种特征的原因。当Python创建一个对象时,将分配内存以进行初始化。一个通用指针PyObject*,指向该指针的对象的类型未修复,只能通过OB_TYPE属性的动态动态来判断物体。

  当管理和维护对象管理和维护对象时,Python使用参考计数来确定是否需要破坏内存中的对象。Python中的所有内容都是一个对象,所有对象都有参考计数ob_refcnt。

  当对象的参考计数减少到0时,Python将释放对象占用的内存和系统资源。

  但这并不意味着最终将发布内存空间,因为频繁释放内存的应用将大大降低Python的执行效率。因此,在Python中使用了内存对象池的技术。它未直接发布。当将来需要应用程序空间时,将从“内存对象池”中优先考虑。

  PIP安装Memory_profiler

  PIP安装psutil

  PIP安装matplotlib

  指示

  来自Memory_profiler导入推动

  @profile(precision = 4,stream = open('test.log','w+'))

  DEF测试(ARGS:列表):

  Em

  跑步:

  python3 test.py

  mem用法:执行该行后指示Python解释器的内存使用率

  增量:这意味着上一行的当前行的内存差异,即增加了多少,如果减少了,将不会显示。

  使用sys.getSizeof方法查看Python对象的内存占用,单位:字节(字节)

  实际上,它称为__ sizeof__方法:

  Python3和Python2中占据的一些数据类型是不同的,例如范围:

  如何计算此值尚未研究?

  暂时已知:此值包括一系列数据的总内存,例如对象的值,签名(包括数据类型,参数,调用方法等)。可变对象占据的内存可能很小,因为对象是指针,指向大数据。

  如果您想自己编写程序,则可以参考其源代码。

  顶部/免费都在Procps软件包(APT-FIN源Procps)中。

  查找CPUS_REFRESH()函数,您可以查看它如何从/proc/stat.meminfo()函数分辨出CPU的使用率。单独进行分析)。

  2G.Python在1990年代初期由荷兰和计算机科学研究协会的Gendolusham设计了2G.Python的班级职业。

  python的内存地址的引入,以查看占有多少内存以及Python查看对象的内存地址已经结束。我想知道您是否找到所需的信息?如果您想进一步了解此信息,请记住要收集对该网站的关注。