我是python中的新手,我发现了一些奇怪的东西:
>>> test="acdefg"
>>> test.replace('a','h')
'hcdefg'
>>> test
'acdefg'
>>> test=[1,2,3]
>>> test.reverse()
>>> test
[3, 2, 1]
正如您在代码中看到的,第一次,变量" test"是一个字符串,当我调用方法"替换"," test"的值。不会改变,第二次是一个列表,并且在我调用方法reverse()后列表发生了变化。
为什么?是因为方法之间存在某些不同之处,还是因为对象之间存在其他不同之处?
答案 0 :(得分:1)
这完全取决于方法的实现。有些方法会修改它们要调用的对象,有些则不会。
答案 1 :(得分:1)
字符串是不可变的。所以你实际上并没有改变test
。您实际上正在获取return
字符串方法的replace
。要使用此修改后的字符串,您必须创建一个新字符串,或者只是用新值替换现有字符串。
>>> some_string = "abcd"
>>> new_string = some_string.replace('a', 'x')
>>> new_string
xbcd
>>> some_string = "abcd"
>>> some_string = some_string.replace('a', 'x')
>>> some_string
xbcd
第二个示例,列表是可变的,并且您正在对列表执行就地操作。如果你真的这样做:
res = your_list.reverse()
res
实际上是None
,因为它不返回任何内容,它实际上就是这样做的,这就是test
列表将保存您执行的新操作的原因。< / p>
阅读Python中不可变vs可变类型的this。
另外,请参阅数据模型上的文档here以进一步了解您的理解。