Python的字符串是按引用切片吗?
我想知道,当我做类似下面的操作时,
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
对象。