可变类型与不可变类型的作用和意义

Python中的变量分为可变类型和不可变类型 两种。

  可变类型: 数字、字符串、元组、可变集合。

  不可变类型: 列表、字典、不可变集合。

  这里的可变不可变,是指内存中的那块内容(value)是否可以被改变

    根据存储的内容是否可变划分为可变类型与不可变类型。如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请

  一块区域(因为老区域是不可变)。如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连

  续申请(+/-)即可,也就是它的address空间地址会保持不变,但区域会变长或者变短。

    通过id(变量名)  来查看变量的空间地址是否发生变化。

     python中所声明的变量都以对象的形式存在,存在于机器的固定内存之中。可以理解为变量名为对象的指针。

   在python中设置的垃圾回收机制采用的是引用计数机制来实现,就是通过使用计数器的方式来判断空间的引用情况,当计

   数器为0时则会将内存回收。例如声明变量a=3,则说明a指向存储3的空间,那么此时存储3的空间引用计数加1。如果此时

   定义a=4,那么变量a的指向则指向内存中存储4的空间地址,存储4的空间引用计数加1,而之前存储3的空间引用减1为0,

   则会被作为垃圾回收掉。

不可变类型

  不可变类型有什么好处?如果数据是不可变类型,当我们把数据传给一个不了解的API时,可以确保我们的数据不会被修改。如果我们要操作一个从函数返回的元组,可以通过内建函数list()把它转换成一个列表。

  python在声明不可变类型时会在已经声明的对象中寻找该对象是否已经被声明过,若该对象被声明过则,变量会直接指向该对象不会再申请新的内存空间。

如a=3已经声明这时声明b=3,则a,b指向同一块内存

  不可变类型不能对其内容直接修改,如字符串‘hellopython‘可以对其进行分割加长的处理(经过如此处理之后python其实是将新的字符串储存到新的内存中),但是不能替换改变其字符串中某个字母的内容。

(一) 数字、字符串

  例如:对于不可变类型  数字1,它在内存中的地址是唯一的。所以a=1, b=1都是指向存储1的内存地址。

    如果a=2,那么变量a的指向则发生了变化,指向了存储2的空间地址。

  举例:这里是最好区分可变与不可变类型的数据了。  如 现在是不可变类型 数字a=1,在修改a+1后得到的b,此时就会创建一个新的内存地址用来保存修改后的对象,所以内存地址不一样。而对于可变类型数据在这一点就不一样。

不可变类型:字符串

不可变类型: 元组

可变类型

可变类型:列表

可变类型:字典

原文地址:https://www.cnblogs.com/lfblogs/p/9745739.html

时间: 2024-07-29 13:01:44

可变类型与不可变类型的作用和意义的相关文章

linux 可变类型与不可变类型

Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 可变类型和不可变类型有些地方区别很大,注意区分. 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收). 不可变类型 以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象. 可以

关于java可变(协变)返回类型的解说之一------------基类与派生类

在java代码中,人们惯性的认为一个方法中只能返回一种返回值或者无返回.博主在做开发过程中碰到了这样一种情况,安卓客户端请求数据,后台可能返回两种结果(1)访问令牌失效,无数据返回.(2)正常获取数据. 这样的情况下需要根据访问令牌标识来判断是否有数据返回.当无效时返回用户重新登录提示,正常时则返回数据.显然,返回的结果有两种,那么一个方法里面只能返回一种类型的禁锢使得开发起来略显笨拙.使得开发起来相当难受. 思考良久,又结合C++协变返回类型的启发.摘抄原文中的一句话:在C++中,只要原来的返

Python可变类型 Vs 不可变类型

可变类型 Vs 不可变类型(这里的可变不可变,是指内存中的那块内容(value)是否可以被改变.) 可变类型(mutable):列表,字典 不可变类型(unmutable):数字,字符串,元组 如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请一块区域(因为老区域#不可变#).不允许变量的值发生变化,如果改变了变量的值,相当于新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量来引用这个对象,当引用计算变为0的时候,就启用垃圾回收机制,原

python可变类型和不可变类型

原文地址:http://www.cnblogs.com/huamingao/p/5809936.html 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(unmutable):数字,字符串,元组 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 代码: name1='wupeiqi' name2=name1 print("name1:%s\nname2:%s" %(name1,name2)) name1='alex' print(&qu

Python的可变类型与不可变类型

Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收). 不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象. >>> i = 5 >>> i

03 可变类型与不可变类型

'''''' ''' 不可变类型:变量的值修改后内存地址不一样 数字类型 int float 字符串类型 str 元组类型 tuple 可变类型: 列表类型 list 字典类型 dict ''' #int number = 100 print(id(number)) #1717008960 number = 111 print(id(number)) #1717009312 #float sal = 1.0 print(id(sal)) #2115946484240 sal = 2.0 prin

python可变类型与不可变类型

一.可变类型与不可变类型的特点 1.不可变数据类型 不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而

Python 可变类型和不可变类型,以及其引用

基本数据类型的引用        在Python中定义一个数据便在内存中开辟一片空间来存储这个变量的值,这块已经被分配的内存空间便会有一个内存地址.访问这块内存需要用到变量名,变量名实际存储的是变量的地址在内存中的地址,但是使用print()函数得到的确实这块内存中实际的地址.这个就当成规定就好,没必要纠结. 获得变量在内存中的地址,可以使用id()函数. 常规使用        变量之间的赋值其实是把一个变量的内存地址传递给另一个变量,这样两个变量便都指向内存中的同一块空间,因此这两个变量的之

指针变量前面类型的作用和意义

1 #include <stdio.h> 2 /* 3 程序功能:理解指针变量前面类型的作用和意义. 4 指针变量前面的类型代表:指针变量内存放地址的寻址能力. 5 */ 6 int main(void) 7 { 8 int a = 0X12345678; 9 10 int *p = &a; 11 12 printf("%X\n",*p);//打印结果为:12345678 原因 :p 是 int * 类型.即:p 的寻址能力为int,也就是4个字节,所以*p 打印1