了解 Python 中的槽
为类创建对象需要内存,存储的属性是字典的形式。 如果我们需要分配数千个对象,将需要大量的内存和索引时间。
Slots 或 __slots__
提供了一种独特的机制来减少对象的大小和更快的索引。 本文将讨论槽常量变量在 Python 中的工作原理以及它如何比使用字典更好。
了解 Python 中的槽
槽是对象内存优化的概念,可以改善 Python 代码运行时间。 例如,当我们从类创建自定义对象时,字典中存储的对象的属性称为 __dict__
。
此外,它允许我们在创建对象后动态创建新属性。
如果没有槽,我们的对象将如下所示。
示例代码:
class sample_class(object):
def __init__(self, *args, **kwargs):
self.key = 'foo'
self.value = 'bar'
if __name__ == "__main__":
sample_object = sample_class()
print(sample_object.__dict__)
输出:
{'key': 'foo', 'value': 'bar'}
在Python中,每个对象都有一个支持添加属性的动态字典。 我们将为每个实例对象都有一个字典实例,占用额外的空间并浪费大量的 RAM。
在 Python 中创建对象时,没有默认功能来分配一定量的内存来存储其所有特征。
利用 __slots__
为一定数量的属性分配空间,可以减少空间浪费并加快程序速度。
示例代码:
class sample_class(object):
__slots__ = ['key','value']
def __init__(self, *args, **kwargs):
self.key = 'foo'
self.value = 'bar'
if __name__ == "__main__":
sample_object = sample_class()
print(sample_object.__slots__)
输出:
['key','value']
请注意
,当调用__slots__
变量时,我们仅访问键来映射字典中的每个值。 尽管 Python 的字典非常直观,但如果我们尝试同时创建数千或数百万个项目,则可能会出现问题。
- 字典需要记忆。 数百万个对象将耗尽 RAM 使用量。
- 字典实际上是一个哈希图。
因此,对于一些属性,字典和槽之间的运行时差异可能并不明显,但随着数据变大,我们会很高兴我们使用了槽。 访问属性时大约可以节省 10% 的运行时间。
示例代码:
import timeit
class sample_class(object):
def __init__(self, *args, **kwargs):
self.key = 'foo'
self.value = 'bar'
class sample_class_slots(object):
__slots__ = ['key','value']
def __init__(self, *args, **kwargs):
self.key = 'foo'
self.value = 'bar'
if __name__ == "__main__":
time = timeit.timeit('t.key', 'from __main__ import sample_class; t=sample_class()')
time_slots = timeit.timeit('t.key', 'from __main__ import sample_class_slots; t=sample_class_slots()')
print("Time without Slots: ", time)
print("Time with Slots: ", time_slots)
输出:
Time without Slots: 0.0202741
Time with Slots: 0.0200698
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串