python初步自学知识总结——数据对象(下)

可变对象与不可变对象

python的数据对象分为两种:可变对象不可变对象
1.可变对象:对象内容可变
(1)列表性(list)
(2)字典型(dictionary)
2.不可变类型:对象内容不可变
(1)int
(2)字符串(string)
(3)float
(4)数值型(number)
(5)元组(tuple)

可变类型对象的变量与C、C++、Java等语言中变量含义一致,不可变变量为python特色,也是为了避免使用变量的副作用。
不可变类型对象一旦分配了存储空间,那么该空间的值就不会改变,如果要“改变“”变量值,则成为另一个对象。

.
>>> 3
3
>>> id(3)
1658439840
>>> id(1+2);id(3+0)
1658439840
1658439840
>>> a=3
>>> int(a)
3
>>> id(a)
1658439840
>>> a=4
>>> id(a)
1658439856
>>> 

可以发现,当变量数值和不变时,这多个变量指向一个对象,地址不变。
而要“改变”不可变对象的变量a的值时,a便不再指向原来的对象3,而是指向另一个对象。
因此,在python中说两个不可变对象的变量a,b的标识不同,指的是其所指向的对象地址不同。

>>> a=3;id(a);type(a)
1658439840
<class 'int'>
>>> a=1.23;id(a);type(a)
52423264
<class 'float'>
>>> a='abcde';id(a);type(a)
57887552
<class 'str'>
>>> 

由于这种规定使得可变对象变量和不可变对象变量多了一个共同性质,python中,数据类型属于对象,而不属于变量。

这使得变量完全成为数据的代称,一个名字,其使用近乎独立于数值本身,是变量的使用更加安全可靠,也增加了自由性。
这使得python的赋值方式更加多样化——

赋值方式

赋值操作,变量和对象联系起来。
——变量只赋值过才是合法的。
1.简单赋值:
variable = object
2.多变量赋值:
variable1,variable2, …… =object1,object2,……
3:多目标赋值:
variable1 = variable2 = …… = variablelen = object
赋值操作符(=)具有右结合性,即当多个赋值操作符相邻时,最右边的赋值操作符优先与对象结合,
故上式等价于:
variable1 = (variable2 = ( …… = (variablelen = object)))

>>> a=b=c=d=1
>>> id(a);id(b);id(c);id(d);
1658439808
1658439808
1658439808
1658439808

4.扩张赋值(增强赋值):
扩张赋值是指赋值操作符与其他二元操作符的组合。对于可变对象来说,它在 原处修改对象;对于不可变对象来说,它使变量从原来所指向的对象移到另一个对象。

>>> a,b=3,5
>>> a,b;id(a);id(b)
(3, 5)
1658439840
1658439872
>>> a+=b;
>>> a,b;id(a);id(b)
(8, 5)
1658439920
1658439872
>>> 

此外,python对象回收机制是由counter内部跟踪和回收对象。
当一个对象被创建时,python解释器就会为其创造两个标准的头部信息:
一是类型标识符;另一个用于内部跟踪变量,即counter。
对于一个对象,每新增一个引用,其引用计数器就加1;每执行一次del操作,其引用计数器就减1。
当一个对象的引用计数器为零后,解释器会择机回收该对象所占用的空间资源。
需要注意的是,del操作只删除变量,而不删除对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值