python的每个对象都分为可变和不可变类型。
主要的核心类型,不可变类型有数字、字符串、元组,可变类型有列表、字典。
不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象。通过id函数查看变量i的内存地址进行验证。
# int型>>> i = 5>>> id(i)1780867920 >>> i += 16>>> id(i)1780867936>>> j = 6>>> id(j)1780867936python内存管理机制的原因,使得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