标签:字符 数据类型 bsp opened closed 哪些 赋值语句 特点 增加
i = 5 i += 1 print(i) #不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象; #通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址) id(i) >>>140243713967984 i += 1 print(i) >>>7 id(i) >>>140243713967960 #可以看到执行 i += 1 时内存地址都会变化,因为int 类型是不可变的; #再改改代码,但多个int类型的变量值相同时,看看它们内存地址是否相同。 i = 5 j = 5 id(i) >>> 140656970352216 id(j) >>> 140656970352216 k = 5 id(k) >>> 140656970352216 x = 6 id(x) >>> 140656970352192 y = 6 id(y) >>> 140656970352192 z = 6 id(z) >>> 140656970352192
>>> i = 1.5 >>> id(i) 140675668569024 >>> i = i + 1.7 >>> i 3.2 >>> id(i) 140675668568976 #修改代码声明两个相同值的浮点型变量,查看它们的id,发现它们并不是指向同个内存地址,这点和int类型不同(这方面涉及Python内存管理机制,Python对int类型和较短的字符串进行了缓存,无论声明多少个值相同的变量,实际上都指向同个内存地址。) i = 2.5 id(i) >>>140564351733040 j = 2.5 id(j) >>> 140564351733016
a = [1, 2, 3] id(a) >>>4385327224 a.append(4) id(a) >>>4385327224 #当存在多个值相同的不可变类型变量时,看看它们是不是跟可变类型一样指向同个内存地址 a = [1, 2, 3] id(a) >>>4435060856 b = [1, 2, 3] id(b) >>>4435102392 #从运行结果可以看出虽然a、b的值相同,但是指向的内存地址不同,我们也可以通过b = a 的赋值语句,让他们指向同个内存地址; a = [1, 2, 3] id(a) >>> 4435060856 b = [1, 2, 3] id(b) >>> 4435102392 b = a id(b) >>>4435060856 #这个时候需要注意,因为a、b指向同个内存地址,而a、b的类型都是List,可变类型,对a、b任意一个List进行修改,都会影响另外一个List的值。 b.append(4) print(a) [1, 2, 3, 4] print(b) [1, 2, 3, 4] id(a) >>>4435060856 id(b) >>>4435060856
标签:字符 数据类型 bsp opened closed 哪些 赋值语句 特点 增加
原文地址:https://www.cnblogs.com/olingrobin/p/10174249.html