首页 > 编程语言 > 详细

Python16_可变与不可变类型

时间:2020-02-04 23:19:16      阅读:78      评论:0      收藏:0      [点我收藏+]

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

 

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

 

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

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

 

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

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

 

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

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

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

 

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

 

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

 

Python中:

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

可变数据类型:list、dict

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

相关链接:

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

 

Python16_可变与不可变类型

原文:https://www.cnblogs.com/grooovvve/p/12261707.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!