zoukankan      html  css  js  c++  java
  • python机制与小数据池

    python机制

    1. id is ==
      • 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是有一个唯一标识的,就好比是身份证号,标识这个空间的叫做内存地址,也就是这个数据(对象)的id,那么你可以利用id()去获取这个数据的内存地址:
        name = '太白'
        print(id(name)) # 1585831283968

      • 那么 is 是什么? == 又是什么?
        == 是比较的两边的数值是否相等,而 is 是比较的两边的内存地址是否相等。 如果内存地址相等,那么这两边其实是指向同一个内存地址。

      • 可以说如果内存地址相同,那么值肯定相同,但是如果值相同,内存地址不一定相同

    2. 代码块
      • 代码块:我们所有的代码都需要依赖代码块执行
      • 一个文件就是一个代码块(函数除外)
      • 交互式命令下一行就是一个代码块
    3. 两个机制(字符串驻留机制):同一个代码块下,有一个机制.不同的代码块下,遵循另一个机制。
    4. 同一代码块下缓存机制
      • 前提条件:同一代码块内.
      • 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同 。
      • 适用对象:int str bool
      • 具体细则:所有的数字,几乎所有的字符串
      • 优点:提升性能,节省内存。
    5. 不同代码块下的缓存机制:小数据池
      • 前提条件:不同代码块内。
      • 机制内容:Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
        python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。
          其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。
      • 适用对象:int str bool
      • 具体细则:
        • int:那么大家都知道对于整数来说,小数据池的范围是-5~256 ,如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址
        • str:字符串要从下面这几个大方向讨论(了解即可!):
          1. 字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。
          2. 字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。
          3. 用乘法得到的字符串,分两种情况。
            • 乘数为1时
              • 仅含大小写字母,数字,下划线,默认驻留
              • 含其他字符,长度<=1,默认驻留
              • 含其他字符,长度>1,默认驻留。
            • 乘数>=2时:
              • 仅含大小写字母,数字,下划线,总长度<=20,默认驻留
          4. 指定驻留。
      • 优点:提升性能,节省内存。
  • 相关阅读:
    纯JS实现中国行政区域上下联动选择地址
    java解析中国行政区域并在页面显示实现动态逐级筛选
    使用HttpClient 发送get、post请求,及其解析xml返回数据
    JS实现动态提示文本框可输入剩余字数(类似发表微博数字提示)
    webApi 数据绑定 获取
    EF Code First 常用命令
    [解决WebClient或HttpWebRequest首次连接缓慢问题]
    【转】Entity Framework技术系列之7:LINQ to Entities
    Ajax方法提交整个表单的信息
    【转】MVC中处理Json和JS中处理Json对象
  • 原文地址:https://www.cnblogs.com/940531gbh/p/11262667.html
Copyright © 2011-2022 走看看