切片操作是否始终分配新对象?

时间:2018-05-14 20:10:07

标签: python slice

我对切片操作感到困惑。

>>> s = "hello world"
>>> y = s[::]
>>> id(s)
4507906480
>>> id(y)
4507906480 # they are the same - no new object was created

>>> z = s[:2]
>>> z
'he'
>>> id(z)
4507835488 # z is a new object

切片操作遵循什么分配规则?

1 个答案:

答案 0 :(得分:4)

对于大多数内置类型,切片始终是浅拷贝...在某种意义上,修改副本不会修改原件。这意味着对于不可变类型,对象计为其自身的副本。 copy module也使用了“复制”的概念:

>>> t = (1, 2, 3)
>>> copy.copy(t) is t
True

对象可以自由使用他们选择的任何分配策略,只要它们实现他们记录的语义即可。 y可以与s相同,但z不能,因为sz存储不同的值。