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可变与不可变类型的主要内容,如果未能解决你的问题,请参考以下文章