可变对象就地改变意味着什么?

时间:2015-04-13 10:50:10

标签: python

只有可变对象可以就地更改;如果更改它们,字符串,元组和其他对象将始终必须创建新对象。 这里的内容是什么意思,为什么元组,字符串在这里是特殊情况

1 个答案:

答案 0 :(得分:2)

在Python中,变量将引用保存到对象

改变"改变"变量,您可以更改引用的对象。或引用其他对象。

"不可变" object强制您使用第一个解决方案,因为该对象本身无法修改。 "可变的"对象可让您在两个选项之间进行选择。


由于字符串是不可变的,所以你不能改变"一个字符串对象。您所能做的就是创建一个新字符串并更新引用以保存新创建的字符串:

>>> v1 = v2 = "hello"
>>> v1 += "world"

# v1 and v2 no longer references the same object:
>>> v1 is v2
False

>>> v1
'helloworld'
>>> v2
'hello'

但是由于列表是可变的,您可以选择更改它们"到位":

>>> v1 = v2 = ['h', 'e', 'l', 'l', 'o']
>>> v1 += ['w', 'o', 'r', 'l', 'd']

# v1 and v2 still references the same object:
>>> v1 is v2
True

>>> v1
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
>>> v2
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']

或者创建新列表并更新参考:

>>> v1 = v2 = ['h', 'e', 'l', 'l', 'o']
>>> v1 = v1 + ['w', 'o', 'r', 'l', 'd']

# v1 and v2 no longer references the same object:
>>> v1 is v2
False

>>> v1
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
>>> v2
['h', 'e', 'l', 'l', 'o']