对于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
网友评论