讨论/算法和数据结构/python3 切片的一个问题/
python3 切片的一个问题

简介

def fun4(s):
if len(s) <= 1:
return
else:
s[0],s[-1] = s[-1],s[0]
fun4(s[1:-1])

递归函数是这样写的,但是在返回的时候,被切片的数据无法正常完成交换。
例如:
输入:s2 = ["1", "2", "3", "4", "5"]
fun4(s2)调用以后
print(s2)
返回:['5', '2', '3', '4', '1']

但是另外一种写法他可以正常返回:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
def helper(start, end, ls):
if start >= end:
return
ls[start], ls[end] = ls[end], ls[start] # 直接使用指针就没有这个问题.
return helper(start+1, end-1, ls)
helper(0, len(s)-1, s)

我的问题是:
为什么切片的这种用法无法正常返回,难道切片后有新的数组被创建了?

展开讨论

建议把代码用 代码块包起来, 然后再粘贴进来. 点下预览.
盲猜:python中一切都是对象,都是引用和指向,列表拷贝要注意浅拷贝(只拷贝一层,类似列表套列表的,内层列表还是原来的,如果改变就会跟着改变).
按ctrl+alt+c ,或者点上面的大括号, 把代码包起来,再点个预览,改下默认语言为python, 格式化 看起来就方便了.