Python的字符串是按引用切片吗?

44 投票
2 回答
9072 浏览
提问于 2025-04-16 16:03

我想知道,当我做类似下面的操作时,

a = "This could be a very large string..."
b = a[:10]

是创建了一个新的字符串,还是返回了一个视图或者迭代器。

2 个回答

0

当你对字符串进行切片操作时,它会返回一个新的字符串实例。字符串是不可改变的对象。

64

Python中的切片是复制的,这意味着每次你进行切片操作(除了一些非常简单的切片,比如a[:]),都会把所有数据复制到一个新的字符串对象中。

根据一位开发者的说法,这样的选择是因为

[引用切片]的方法更复杂,实施起来更困难,并且可能导致一些意想不到的行为。

举个例子:

a = "a long string with 500,000 chars ..."
b = a[0]
del a

在复制切片的设计中,字符串a会立即被释放。而引用切片的设计会让500kB的字符串一直保留在内存中,即使你只对第一个字符感兴趣。

显然,如果你真的需要查看一个字符串的内容,可以使用memoryview对象。

撰写回答