前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python解惑之对象可变与不可变

Python解惑之对象可变与不可变

作者头像
double
发布2019-05-28 18:50:00
7340
发布2019-05-28 18:50:00
举报
文章被收录于专栏:算法channel

编程关键问题

面向对象的语言,普遍存在的一个问题就是对象的可变(mutable),与对象的不可变(immuatable)。它是重要的,理解这个概念对于我们认识面向对象,避免掉入编程陷阱,具有非凡的意义。

接触过c, c++, c#, java, python, 这些语言除了c不具有强烈的这个(可变与不可变)色彩外,其他语言都存在这个性质。这个系列是Python与数据分析,所以,今天我们重点拿Python语言来说说这个性质,其他语言类似。

因为时间紧张,这个话题分为两部分总结,今天先来说说:可变与不可变的概念,以及为什么要重视它;接下来,说说怎么利用可变与不可变,怎么避免掉入陷阱。

概念

不可变对象:对象不允许做任何修改,只能使用内部封装的方法和属性。

可变对象:对象内封装的属性或者元素可被修改。

以上定义加入个人理解,未必完全准确,下面我拿例子来做解释。

Python中的不可变对象常见的:

  • int
  • float
  • complex
  • bool
  • string
  • tuple
  • range
  • frozenset
  • bytes

可变对象常见的:

  • list
  • dict
  • set
  • bytearray
  • 用户自定义的类(未特别声明为不可变对象)

由此可见,Python中常见的内置不可迭代的对象往往为不可变对象,但是也有例外,如frozenset;而可迭代对象往往是可变对象。

大家可以去自行核实这些对象是否具备概念中的属性。

为什么重要?

基于它们的概念,我们可以看到要想修改此对象,没有其他方法,只能通过创建一个新的对象来做更新;所以,在需要重复修改的场合,如果使用不可变对象,就需要创建多个新的对象,结果就是造成对象堆积,浪费内存。

以上是不可变对象使用时注意事项,那么,任何场合使用可变对象,就不会出现问题吗? 未必! 可变对象使用同样有一定陷阱。

因为Python中函数或方法一旦创建完成后,下次再次调用它时,带有默认值的参数就不会再被重建。这种场景下也要格外注意。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档