Python 动态类型
动态类型
对象是储存在内存中的实体。但我们并不能直接接触到该对象。我们在程序中写的变量,存储的是指向这一对象的引用。
引用和对象分离,是动态类型的核心。引用可以随时指向一个新的对象。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。>>> a = 'ABC' >>> b = a >>> a = 'XYZ' >>> a,b
第一个赋值语句,引用 a 指向内存中的字符串对象 'ABC' 。
第二个赋值语句,引用 b 也指向对象 'ABC' 。
第三个赋值语句,引用 a 指向内存中的字符串对象 'XYZ' 。此时,引用 a 不再指向对象 'ABC' ,引用 b 仍指向对象 'ABC' 。
我们用内置函数 id() 来查看对象的内存地址:
>>> a = 'ABC' >>> b = a >>> id(a),id(b) (63182768, 63182768) >>> a = 'XYZ' >>> id(a),id(b) (64172360, 63182768) >>> a,b ('XYZ', 'ABC')
我们再看另外一种情况:
>>> L1 = [1,2,3] >>> L2 = L1 >>> L1[0] = 10 >>> L1,L2
>>> L1 = [1,2,3] >>> L2 = L1 >>> id(L1),id(L2),id(L1[0]),id(L1[1])) (56386184, 56386184, 8791156384592, 8791156384624) >>> L1[0] = 10 >>> id(L1),id(L2),id(L1[0]),id(L1[1])) (56386184, 56386184, 8791156384880, 8791156384624) >>> L1,L2 ([10, 2, 3], [10, 2, 3])
L1,L2的引用没有发生变化,依然指向那个列表对象。列表的元素 L1[0] 进行重新赋值操作,改变的是该元素对象的引用,对整个列表对象的引用没有影响。
能够改变对象自身,且存放对象的内存地址不会改变的数据类型,称为可变数据类型。包括列表、字典和集合。
不能改变对象自身,或改变对象自身后,存放对象的内存地址发生改变的数据类型,称为不可变数据类型。包括数字、字符串和元组。

更多精彩