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] 删除。
我来说两句