zoukankan      html  css  js  c++  java
  • python基础(十四、变量进阶

    15.变量进阶
    1)变量的引用
    变量和数据都是保存在内存中的。
    在Python中函数的参数传递以及返回值都是靠引用传递的。
    (1)引用的概念
    ①在Python中变量和数据是分开存储的
    ②数据保存在内存中的一个位置,变量中保存着数据在内存中的地址
    ③变量中记录数据的地址,就叫做引用
    ④使用id()函数可以查看变量中保存数据所在的内存地址
    注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用,
    变量不再对之前的数据引用,变量改为对新赋值的数据引用

    (2)变量引用 的示例
    在Python中,变量的名字类似于便签纸贴在数据上

    (3)小数据池
    为了节省内存,提高效率,python有小数据池的概念,意思为当你执行一个代码块时,python会先检查这个代码块是否存在,存在则重用,不存在则新建。
    小数据池,也称为小整数缓存机制,或者称为驻留机制等等.
    小数据池也是只针对 int(float),str,bool。
    int(float):任何数字在同一代码块下都会复用。
    bool:True和False在字典中会以1,0方式存在,并且复用。
    str:几乎所有的字符串都会符合缓存机制
    实现机制:
    执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。
    ①int(float)
    (a)Python自动将 -5~256 的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。

    (b)其它的int和float被创建时会被存入小数据池。但每次运行内存地址会变化

    ②字符串
    我们创建字符串时,python会将一定规则的字符串(绝大多数)在字符串驻留池中创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。

    ③bool型
    只有True,False,Python自动将它们进行了缓存。无论你创建多少个变量指向True,False,那么他在内存中只存在一个。

    (4)函数的参数和返回值的传递
    在Python中,函数的实参/返回值都是靠引用来传递来的。

    2)可变和不可变类型
    (1)不可变类型
    内存中的数据不允许被修改(可以通过修改内存地址重新赋值,但不能修改内存地址中保存的数据):
    ①数字类型 int, bool, float, complex, long(2.x)
    ②字符串 str
    ③元组 tuple

    (2)可变类型
    内存中的数据可以被修改(不改变变量中保存的内存地址,可以改变内存地址中的数据,通常使用方法调用修改内存地址中的数据):
    ①列表 list
    ②字典 dict



    注意:字典的key只能使用不可变类型的数据

    注意:
    可变类型的数据变化,是通过方法来实现的。
    如果给一个可变类型的变量,赋值了一个新的数据,引用会修改:变量不再对之前的数据引用,变量改为对新赋值的数据引用

    (3)哈希 (hash)
    ①哈希的概念
    Python中内置有一个名字叫做hash(o)的函数,接收一个不可变类型的数据作为参数,返回结果是一个整数。
    哈希是一种算法,其作用就是提取数据的特征码(指纹),相同的内容得到相同的结果,不同的内容得到不同的结果

    ②为了保证字典key的不可重复,保存字典时要对key进行哈希
    在Python中,设置字典的键值对时,会首先对key进行hash已决定如何在内存中保存字典的数据,以方便后续对字典的操作:增、删、改、查
    键值对的key必须是不可变类型数据,键值对的value可以是任意类型的数据

    (4)MD5
    MD5一般用来验证文件或密码的一致性
    ①获取MD5字符串

    ②MD5加盐
    MD5目前已经可以破解,可以通过MD5加盐来提高保密程度

    ③MD5应用
    用户注册和登录,比较密码

    (5)计算大文件的MD5值
    计算大文件的MD5值可以保证获取文件的完整性和正确性

    注意:md5.update会将每次字符串拼接。

  • 相关阅读:
    测试如何发挥更大的价值?聊聊测试左移和右移
    Cocos Creator性能调优
    跨域问题产生的原因和解决方法
    tornado部署
    tonado
    MySQL binlog
    grpc
    nextjs中的懒加载
    前端低代码-少写代码实现灵活需求
    MySQL中的锁
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14061858.html
Copyright © 2011-2022 走看看