zoukankan      html  css  js  c++  java
  • Python16_可变与不可变类型

    先记住:一切皆对象,一切皆对象的引用

     

    类的实例化就是对象:类与对象的关系就如模具和铸件的关系,类的实例化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

     

    我的理解就是:对象是实实在在存在的东西,存在于内存中,需要占用内存空间的。而类则是模具一般,是对象的抽象,对象的定义。对象是类的实例,类是灵魂的抽象的,对象是肉体的实例的。

    当然理解内存,理解地址很关键!

     

    一个对象可以被多个引用所指向。

    当这个对象没有引用指向它时,这个对象所占用的内存,就要被“垃圾回收”了。

     

    不可变数据类型指的是引用的地址处的值不能改变。

    例如31106520地址处的值:1 ,被x引用了,x是不可变数据类型,所以这个地址处的值不能改变。直到它被回收为止。

    不可变数据类型的优点就是内存中不管有多少个引用,相同的对象只占用了一块内存,但是它的缺点就是当需要对变量进行运算从而改变变量引用的对象的值时,由于是不可变的数据类型,所以必须创建新的对象,这样就会使得一次次的改变创建了一个个新的对象,不过不再使用的内存会被垃圾回收器回收。

     

    可变数据类型指的是:值变化了,引用的地址不会变,但是地址处的值改变了,或是地址得到了扩充。不会创建新的对象。这里的可变只是对于类似于append、+=等这种操作。

     

    总之,用一句话来概括上述过程就是:“python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。”

     

    Python中:

    不可变数据类型:int、float、string、tuple

    可变数据类型:list、dict

    ===============================================================

    相关链接:

    这个链接讲得很好:https://blog.csdn.net/dan15188387481/article/details/49864613

  • 相关阅读:
    Kaggle 神器 xgboost
    改善代码可测性的若干技巧
    IDEA 代码生成插件 CodeMaker
    Elasticsearch 使用中文分词
    Java性能调优的11个实用技巧
    Lucene 快速入门
    Java中一个字符用unicode编码为什么不是两字节
    lucene 的评分机制
    面向对象设计的 10 条戒律
    2019.10.23-最长全1串(双指针)
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12261707.html
Copyright © 2011-2022 走看看