001_python可变与不可变类型

Posted hjh0wjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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













以上是关于001_python可变与不可变类型的主要内容,如果未能解决你的问题,请参考以下文章

python —— 可变与不可变类型

python的可变与不可变数据类型

python的可变与不可变数据类型

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

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

Python基础(可变与不可变类型 / is和== / 特殊属性)