Skip to main content
 首页 » 编程设计

python之切片操作是否总是分配一个新对象

2025年05月04日22qq号

我对切片操作很困惑。

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

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

请您参考如下方法:

对于大多数内置类型,切片始终是一个浅拷贝……从某种意义上说,修改副本不会修改原始数据。这意味着对于不可变类型,对象算作自身的副本。 copy module也使用了“复制”这个概念:

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

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