001_python可变与不可变类型

python的每个对象都分为可变和不可变类型。

主要的核心类型,不可变类型有数字、字符串、元组,可变类型有列表、字典。

 

不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象。通过id函数查看变量i的内存地址进行验证。

# int型
>>> i = 5
>>> id(i)
1780867920
>>> i += 1
6
>>> id(i)
1780867936

>>> j = 6
>>> id(j)
1780867936

python内存管理机制的原因,使得int类型的相同数字,他们的内存一致

 

浮点型、字符串以及元组数值相同,内存却不一致

# 字符串
>>> var1 = "a"
>>> var1 += "b"
>>> var2 = "ab"
>>> id(var1)
74598496
>>> id(var2)
50818208

# 浮点型
>>> float1 = 15.10
>>> float1 += 0.15
>>> float2 = 14.24
>>> float2 += 1.01
>>> id(float1)
58247136
>>> id(float2)
58246800

# 元组
>>> tuple1 = (2, 1)
>>> tuple2 = (2, 1)
>>> id(tuple1)
72506344
>>> id(tuple2)
72506384

 

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

# list
>>> list1 = [1, 2, 3]
>>> id(list1)
72578872
 
>>> list1 = [3, 2, 1]
>>> id(list1)
72578632
 
>>> list1.append(0)
[3, 2, 1, 0]
>>> id(list1)
72578632
 
>>> list2 = [3, 2, 1, 0]
>>> id(list2)
72579192                    # 虽然list1、list2的值相同,但是指向的内存地址不同
 
>>> list2 = list1           # 通过list2 = list1 的赋值语句,让他们指向同个内存地址
>>> id(list2)
72578632

转载于:https://www.cnblogs.com/hjh0wjy/p/10037054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值