python中的可变对象/不可变对象和golang中的值变量/指针变量的关系

对于golang,我们知道字符串,数组等是值变量,具有值传递的特性;slice,map等是指针变量,具有指针传递的特性。
对于python,同样有此两种特性的变量:str是不变对象,而list是可变对象。

在python中,对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:

>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']

但是对于不可变对象,比如str,对str进行操作的结果就不一样了:

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc'

结论:对于不变对象来说,调用对象的所有方法,都不会对不变对象本身的值造成改变,只会返回一个新的修改后的变量。而对于可变对象来说,调用对象的方法或者复制,都会对可变对象本身的值造成改变。

参考:使用dict和set

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录1 数据类型1.1 整数1.2 浮点数1.3 字符串1.4 布尔值1.5 空值None1.6 列表list1....
    hufengreborn阅读 5,272评论 0 2
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,222评论 1 118
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 5月30日 晴 十五的月亮圆又圆,它是自己发的光吗? 不是,月亮是反射的太阳的光,它本身不是一个发光体。 为什么...
    悟道阅读 1,872评论 0 1
  • 欣媛姓彭,弹一曲高山流水,写一手清丽小文。 八月的晚风透着丝丝的闷热,连平时经常遛狗的爷爷出去了一会就回来了。这个...
    亮子说阅读 3,599评论 0 0