linux 可变类型与不可变类型

Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。

可变类型和不可变类型有些地方区别很大,注意区分。

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。

不可变类型

以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象。

可以看到执行 i += 1 时,内存地址都会变化,因为int 类型是不可变的。

再改改代码,但多个int类型的变量值相同时,看看它们内存地址是否相同。

对于不可变类型int,无论创建多少个不可变类型,只要值相同,都指向同个内存地址。同样情况的还有比较短的字符串,浮点型。

可变类型

以列表list为例

list在append之后,还是指向同个内存地址,因为list是可变类型,可以在原处修改。

改改代码,当存在多个值相同的可变类型变量时,看看它们是不是跟不可变类型一样指向同个内存地址。

从运行结果可以看出,虽然a、b的值相同,但是指向的内存地址不同。我们也可以通过b = a 的赋值语句,让他们指向同个内存地址:

这个时候需要注意,因为a、b指向同个内存地址,而a、b的类型都是List,可变类型,对a、b任意一个List进行修改,都会影响另外一个List的值。

类 中元素的可变元素与不可变元素

时间: 2024-10-16 03:10:19

linux 可变类型与不可变类型的相关文章

关于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

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

Python中的变量分为可变类型和不可变类型 两种. 可变类型: 数字.字符串.元组.可变集合. 不可变类型: 列表.字典.不可变集合. 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 根据存储的内容是否可变划分为可变类型与不可变类型.如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请 一块区域(因为老区域是不可变).如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连 续申请(+/-)即可,也就是它的address空间地址会保持不变,

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()函数. 常规使用        变量之间的赋值其实是把一个变量的内存地址传递给另一个变量,这样两个变量便都指向内存中的同一块空间,因此这两个变量的之

Linux下OTL 使用long long类型支持数据库的BIGINT

代码如下: #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) { n=atoll(str); } #define OTL_BIGINT_TO_STR(n,str) { sprintf(str,"%lld", n); } #include "otlv4.h"// include the OTL 4.0 header file 从上面可以看出,OTL并没有实际做什么工作,它只是用宏的方式预留了接口