迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

了解 Python 中的槽

作者:迹忆客 最近更新:2023/06/25 浏览次数:

为类创建对象需要内存,存储的属性是字典的形式。 如果我们需要分配数千个对象,将需要大量的内存和索引时间。

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 的字典非常直观,但如果我们尝试同时创建数千或数百万个项目,则可能会出现问题。

  1. 字典需要记忆。 数百万个对象将耗尽 RAM 使用量。
  2. 字典实际上是一个哈希图。

因此,对于一些属性,字典和槽之间的运行时差异可能并不明显,但随着数据变大,我们会很高兴我们使用了槽。 访问属性时大约可以节省 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

上一篇:在 Python 中设置 HTTP 代理设置

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中设置 HTTP 代理设置

发布时间:2023/06/25 浏览次数:141 分类:Python

在本文中,我们将讨论如何在我们的计算机和Python中设置HTTP代理设置。使用export命令在Python中设置HTTP代理设置

Pipenv 指定Python版本

发布时间:2023/06/25 浏览次数:88 分类:Python

本文讨论了使用 Pipenv 创建具有特定 Python 版本的虚拟环境的几种方法。 我们将列出先决条件并解释如何使用 pipelinev 所需的命令在虚拟环境中安装特定版本的 Python。

Python 验证 IP 地址

发布时间:2023/06/25 浏览次数:65 分类:Python

冒号分隔组 (:)。 在本指南中,我们将验证 IPv4 地址。在 Python 中验证 IP 地址验证IP地址意味着检查输入的IP是否有效。

Python 中的随机 IP 地址生成器

发布时间:2023/06/22 浏览次数:56 分类:Python

Python 提供了多个可用于打印随机 IP 地址的模块。 本教程将教您在 Python 中以字符串形式生成随机 IP 地址。使用 Faker 模块在 Python 中生成随机 IP 地址作为字符串

在 Python 中运行单元测试

发布时间:2023/06/22 浏览次数:138 分类:Python

在称为单元测试的软件开发过程中,检查应用程序中较小的、可独立测试的组件(称为单元)的功能。 Python unittest 模块允许我们运行单元测试。本文将讨论单元测试以及如何在 Python 中进行测

Python 单元测试发现

发布时间:2023/06/22 浏览次数:118 分类:Python

本文将向我们介绍单元测试以及如何针对特定代码段运行它。 我们将学习 discover 命令的用法来自动识别模块名称,以及为什么它在 Python 中可能不起作用。

Python 中的参数化单元测试

发布时间:2023/06/22 浏览次数:80 分类:Python

在 Python 中,我们可以使用参数化单元测试为每个项目或测试用例生成一个测试。 本文将探讨 Python 的参数化单元测试。Python 中参数化单元测试的目的 当开发人员编写单元测试时,他们通常采

Python Unittest 和 Pytest

发布时间:2023/06/22 浏览次数:107 分类:Python

这篇文章的主要目的是讨论Python中两个最常用的单元测试框架unittest和pytest,它们的优缺点以及在何时选择哪个框架。

Python 模拟类属性

发布时间:2023/06/22 浏览次数:161 分类:Python

本文的主要目的是演示如何使用 python 单元测试模块 unittest 操作类属性以进行测试和调试。模拟类属性的原因

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便