python之可变对象与不可变对象

  1. 该问题也可被描述为 可变数据类型与不可变数据类型
  2. 不可变对象: 该对象所指向的内存中的值不能被改变.当改变某个变量的时候,由于其所指的值不能被改变,相当于会把原来的值复制一份再改变,相当于开辟了一个新的地址,变量再指向新的地址.
  3. 可变对象: 该对象所指向的内存中的值能被改变.当改变某个变量的时候,相当于直接改变其所指向的值,而不会开辟新的空间,即原地改变.
  4. 可变数据类型: list set dict; 不可变数据类型: number str tuple.
#关于可变类型与不可变数据类型
>>> a = [1,2,3]
>>> id(a)
2705831921864
>>> a.append(4)
>>> id(a)
2705831921864  # 可变数据类型,支持原地改变,变量改变时,变量不会指向新的内存地址

>>> a = 5
>>> id(a)
1662151824
>>> a = a - 1
>>> id(b)
2705830218552   # 不可变数据类型,不支持原地改变,当变量改变时,变量指向新的内存地址

>>> a = [1,2,3]
>>> b = a    # python中的赋值是对象的引用,将新变量引用到原变量指向的地址(对象)
>>> a.append(4)
>>> a,b
([1, 2, 3, 4], [1, 2, 3, 4])     #不可变数据类型,a,b都指向原地址(对象); 

>>> a = 'dgsjagfjks'
>>> b = a
>>> a = a + 'fsd'
>>> a,b
('dgsjagfjksfsd', 'dgsjagfjks')  #不可变数据类型,a指向了新的地址(对象),b指向原地址(对象); 

>>> a = (1,)
>>> b = a
>>> a = (1,2)
>>> a,b
((1, 2), (1,))    #不可变数据类型,a指向了新的地址(对象),b指向原地址(对象); 


>>> a = -5
>>> b = a
>>> a = 7
>>> a,b
(7, -5)   #不可变数据类型,a指向了新的地址(对象),b指向原地址(对象); 

>>> a = -5.5
>>> b = a
>>> a = -6.0
>>> a,b
(-6.0, -5.5)   #不可变数据类型,a指向了新的地址(对象),b指向原地址(对象); 

>>> a = 9j
>>> b = a
>>> a = 10j
>>> a,b
(10j, 9j)   #不可变数据类型,a指向了新的地址(对象),b指向原地址(对象); 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值