python如何在内存中存储对象

听马兰吉

据我了解,列表是一块连续的内存位置,其中包含指向内存中元素值的指针。如下所示:

内存中列出

我的问题是它与内存中的对象是否相同,即:假设我有一个带有以下实现的init方法的点类:

class Point: 
    def __init__(self, x, y): 
        self.x = x
        self.y = y

然后创建一个新的点对象:

p = Point(4,6)

指向的指针p.x和指向的指针p.y在内存中会相邻吗?

阿兰·费

Python(即编程语言)没有内存位置或指针的概念。因此,从这个角度来看,您的问题没有答案。您的问题只能针对python的特定实现来回答,例如CPython

就是说,对于几乎所有的python实现,答案都是“”。这是因为(大多数)python类将其属性存储在字典中。我们可以通过以下名称访问此词典__dict__

>>> Point(1, 2).__dict__
{'x': 1, 'y': 2}

由于字典必须高效并且具有O(1)查找时间,因此通常将其实现为哈希表的机会x,并y为紧挨彼此在哈希表是非常渺茫。

但是,并非所有类都使用字典来存储属性。有两个例外:

  • 内置类,如字典,整数,字符串等。
  • 具有__slots__属性的

特殊的__slots__类变量允许我们告诉python该类将具有哪些属性。然后,Python将仅分配足够的内存来存储这些属性,并且尝试创建任何其他属性将导致错误:

class Point: 
    __slots__ = ('x', 'y')

    def __init__(self, x, y): 
        self.x = x
        self.y = y
>>> p = Point(1, 2)
>>> p.x
1
>>> p.__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Point' object has no attribute '__dict__'
>>> p.z = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Point' object has no attribute 'z'

如果一个类使用__slots__,则其所有属性很可能彼此相邻地存储在内存中。但这仍然不能保证。python实现可以存储所需的属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象如何存储在内存中?

来自分类Dev

如何在内存中获取对象?python指针

来自分类Dev

IEnumerable如何在c#中存储在内存中?

来自分类Dev

GCC如何在内存中存储成员函数?

来自分类Dev

函数如何在内存中编码/存储?

来自分类Dev

c语言如何在内存中存储int?

来自分类Dev

Numpy 数组如何在内存中存储数据?

来自分类Python

如何在内存中创建文件对象

来自分类Dev

BASIC,行如何存储在内存中?

来自分类Linux

函数如何存储在内存中?

来自分类Dev

vector <string>如何存储在内存中

来自分类Dev

JavaScript数组如何存储在内存中

来自分类Dev

循环数组如何存储在内存中

来自分类Dev

函数参数如何存储在内存中?

来自分类Dev

如何在不将查询结果存储在内存中的情况下实现存储库?

来自分类Dev

是否可以在内存映射文件中存储python对象(特别是sklearn模型)?

来自分类Dev

Python的可迭代对象是否真的将所有值存储在内存中?

来自分类Dev

数组如何在内存中处理?

来自分类Dev

如何在内存中处理引用

来自分类Dev

ArrayBuffer如何在内存中工作?

来自分类Dev

如何在Windows中设置一个存储在内存地址中的陷阱?

来自分类Dev

对象的功能在哪里存储在内存中?

来自分类Dev

以下对象存储在内存中的什么位置?

来自分类Dev

如何在内存中存储2-3 GB的树,并使其可被nodejs访问?

来自分类Dev

MIPS-如何在内存中存储前256个数字

来自分类Java

如何在内存中的Kafka Streams状态存储上启用缓存

来自分类Dev

如何在内存中创建一个git存储库?

来自分类Dev

阵列存储在内存中

来自分类Dev

如何在内存中(或其他地方)用Java表示对象的结尾?

Related 相关文章

热门标签

归档