千锋教育-做有情怀、有良心、有品质的职业教育机构

python 的不可变对象

来源:千锋教育
发布时间:2023-11-08 08:10:42
分享

在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的绑定的内存地址

(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

>>>xisy

True

>>>yisz

True

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

(1972461792,1972461792,1972461792)

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

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

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

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

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

以上内容为大家介绍了python的不可变对象,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • python导入dlib时出错解决方法 python中导入dlib出错的原因:没有安装dlib库。解决方法:安装dlib库pipinstalldlib安装时报这个错误:TypeError:parse()gotanunexpectedkeyw
  • python代码检测工具及区别 pep8/pycodestyle相信大家多多少少都见过PEP8,那PEP8到底是个啥?其实PEP8是一种Python代码规范指南,其目的是为了保持代码的一致性、可读性。检查自己代码是否符合PEP8规范
  • Python基础之numpy中的常见函数有哪些 有些Python小白对numpy中的常见函数不太了解,今天小编就整理出来分享给大家。Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
  • python获取当前时间日期有哪些方法? 获取到时间也是我们在学习python遇到的常见问题,根据不同的需求,获取的方式也有所不同,下面针对获取的几个场景,给大家整理出来几个方式。一、时间日期基本介绍时间日期类型在Python中主要有两个模块
  • python yield的用法 通常大家遇到不会内容,第一想法肯定是进行搜索查找了,然而所有标题叫简单易懂并非真的如此,我在查询pythonyield就是,既然无简单易懂内容,小编就帮大家集合整理出来。结合网上教学内容,指向yiel
  • 详析python多行代码注释快捷键的用法 我们在敲击代码时,遇到不需要使用的语句,大家是否一行一行的删除?这样工作量可谓庞大,今天给大家带来关于注释的快捷键使用,一起来看看吧~关于python编程注释快捷键1、注释单行(1)方法1:直接在单行