zoukankan      html  css  js  c++  java
  • python——动态类型

    1.变量,对象,引用

      变量是一个系统表的元素,拥有指向对象的连接的空间;

      对象是分配的一块内存;

      引用是自动形成的从变量到对象的指针;

      类型属于对象,而不是变量

          a=3;  变量a变成对象3的一个引用,内存中以指针形式实现 

    2. 对象的垃圾收集

    垃圾收集:每个对象中保持一个计数器,计数器记录了当前指向该对象的引用的数目;一旦计数器设置为0,则对象的内存空间就会自动收回。

    好处——可以在脚本中任意使用对象而不需要考虑释放内存空间

    3.共享引用

      变量是一个指向对象的指针,而不是可以改变的内存区域的标签:给一个变量赋一个新的值,并不是替换了原始的对象,而是让这个变量去引用一个完全不同的一个对象。实际的效果就是对一个变量赋值,仅仅会影响那个被赋值的变量。

      可变对象,以及原处的改变,有些不同。

    4.共享引用和在原处修改

        上图,L1的原处修改影响到L2,如何避——需要Python拷贝对象:内置列表函数,标准库copy模块,切片

    5. 共享引用和相等

      ”==“操作符——测试两个被引用的对象是否有相同的值

      ”is操作符“——检查两个变量是否指向同一个对象

    6. 引用 VS 拷贝:

    (1)没有限制条件的分片表达式(L[:])能够复制序列,但此法只能浅层复制。

    (2)字典 copy 方法,D.copy() 能够复制字典,但此法只能浅层复制

    (3)有些内置函数,例如 list,能够生成拷贝 list(L)

    (4)copy 标准库模块能够生成完整拷贝:deepcopy 本质上是递归 copy

    (5)对于不可变对象和可变对象来说,浅复制都是复制的引用,只是因为复制不变对象和复制不变对象的引用是等效的(因为对象不可变,当改变时会新建对象重新赋值)。所以看起来浅复制只复制不可变对象(整数,实数,字符串等),对于可变对象,浅复制其实是创建了一个对于该对象的引用,也就是说只是给同一个对象贴上了另一个标签而已。

  • 相关阅读:
    Java秒杀系统实战系列~整合RabbitMQ实现消息异步发送
    Java秒杀系统实战系列~分布式唯一ID生成订单编号
    Java秒杀系统实战系列~商品秒杀代码实战
    Java秒杀系统实战系列~整合Shiro实现用户登录认证
    Java秒杀系统实战系列~待秒杀商品列表与详情功能开发
    Java秒杀系统实战系列~整体业务流程介绍与数据库设计
    Java秒杀系统实战系列~构建SpringBoot多模块项目
    重磅发布- Java秒杀系统的设计与实战视频教程(SpringBoot版)
    ct
    mysql 分区表
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/4644061.html
Copyright © 2011-2022 走看看