百科狗-知识改变命运!
--

python 的不可变对象

梵高1年前 (2023-11-21)阅读数 30#技术干货
文章标签内存

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

python 的不可变对象

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

(1972461792,1972461792,1972461792)

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

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

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

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

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

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

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)