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

  • 相关阅读:
    net core 2 读取appsettings.json
    转: C# 根据当前时间获取,本周,本月,本季度等时间段 .Net中Exception
    转:5种回到顶部的写法从实现到增强
    转:jQuery 常见操作实现方式
    NLog 自定义字段 写入 oracle
    转:C# 使用NLog记录日志
    转:NLog之:文件类型目标(File target)
    springboot2.x+jwt+shiro最简单、最快速整合方式
    windows部署mindoc
    docker安装mongodb
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/4644061.html
Copyright © 2011-2022 走看看