python 的不可变对象

发布时间:2022-05-11 09:57:10 人气:73 作者:多测师

  在python中一切皆对象。在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址。

  python中,对象分为可变(mutable)和不可变(immutable)两种类型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象。

  不可变对象

  见一个例子,分析不可变对象的特点

  python内置id()函数,用于返回对象的唯一标识(identity)。id()返回的是十进制,对象实际内存地址为hex(id(object)),本文中将id()与hex(id())等价使用。

  >>> a = 1 #将变量a与内存中的值为1的内存绑定在一起

  >>> a = 2 # 将变量a与内存中值为2的内存绑定在一起,并不是修改原来a绑定的内存中的值,

  # 这时,原来的这个值为1的内存地址的引用次数减一,当引用计数为0时,内存地址被回收

  >>> b = a # 变量b绑定与a一样的内存

  >>> id(b),id(a) # 打印a,b的绑定的内存地址

python 的不可变对象

  (1972461824, 1972461824)

  >>> b = 3 # 创建一个内存值为3的内存地址与变量名字b进行绑定。这时,a还是指向值为2的内存地址

  >>> a,b

  (2, 3)

  >>> id(b),id(a) # 打印a,b的绑定的内存地址

  (1972461856, 1972461824)

  >>> x = 1

  >>> y = 1

  >>> z = 1

  >>> x is y

  True

  >>> y is z

  True

  >>> id(x),id(y),id(z)

  (1972461792, 1972461792, 1972461792)

  从第二个例子可看出因为整数为不可变对象,x,y,z在内存中均指向一个值为1的内存地址。

  不可变对象最大的优点便是减少重复的值对内存空间的占用。

  缺点便是如第一个例子中所示,我要修改这个变量绑定的值,如果内存中没有存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。

  而不是修改变量原来指向的内存块的值,这回给执行效率带来一定的降低。

  原来的内存块会因变量与其他内存块绑定而引用次数减1.

  以上内容为大家介绍了python 的不可变对象,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线