zoukankan      html  css  js  c++  java
  • 谈谈python的小数据池

    一、什么是小数据池?
      小数据池是一种缓存机制,也被称为驻留机制。各种编程语言中都有类似的东西(常量池、小数据池都是指得同一个内容)。

      python自动将-5~256的整数、有一定规则的字符串、都放在一个池中,只要变量是这些范围内的整数或者是字符串,则直接引用,不需要另外开辟一块内存。

      小数据池的应用数据类型:int(-5~256之间的整数)、string(字符串)、bool(布尔值)。其他数据类型不存在驻留机制。

    二、小数据池特性
      优点:能够提高字符串、整数的处理速度。省略了创建对象的过程。(节省内存、提高性能和效率)

      缺点:在"池"中创建或者插入新的内容会花费更多的时间。

    1、整数
    官方文档:
    The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you
    actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behavior of Python in
    this case is undefined.
    在python中,-5~256会被加到小数据池中,每次使用都是同一个对象
    在使用的时候,内存中只会创建一个该数据的对象,保存在小数据池中。当使用的时候直接从小数据池中获取对象的内存引用,而不需要重新创建一个新的数据,这样会节省更多的内存区域。
    2、字符串
    Incomputer science, string interning is a method of storing only onecopy of each distinct string value, which must be immutable. Interning strings makes
    some stringprocessing tasks more time- or space-efficient at the cost of requiring moretime when the string is created or interned. The distinct values are
    stored ina string intern pool. –引⾃自维基百科
    如果字符串的长度是0或者1,都会默认进行缓存。(中文字符无效)
    字符串长度大于1,但是字符串中只包含数字,字母,下划线时会被缓存。
    用乘法得到的字符串:1)乘数为1,仅包含数字,字母,下划线时会被缓存。如果包含其他字符,而长度<= 1也会被驻存(中文字符除外)。2)乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20
    指定驻留:可以通过sys模块中的intern()函数来指定要驻留的内容。

  • 相关阅读:
    回调函数实现类似QT中信号机制
    Qt Creator下载和安装(详细教程)
    对象池实现分析
    MongoDB Redis
    双重加锁
    开源项目
    进程创建
    WebAPI性能优化
    StatusCodePagesMiddleware中间件如何针对响应码呈现错误页面
    NET Core + Angular 2
  • 原文地址:https://www.cnblogs.com/helloworld3/p/11154985.html
Copyright © 2011-2022 走看看