切片操作总是分配新对象吗?

2024-04-23 08:00:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对切片操作感到困惑。你知道吗

>>> 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

切片操作遵循什么分配规则?你知道吗


Tags: thenoidhellonewworldobjectis
1条回答
网友
1楼 · 发布于 2024-04-23 08:00:34

对于大多数内置类型,切片总是一个浅拷贝。。。从这个意义上说,修改副本不会修改原件。这意味着对于不可变类型,一个对象算作其自身的副本。^{} module也使用“copy”这个概念:

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

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

相关问题 更多 >