在python中运行函数后,切片对象作为参数没有改变



将可变对象传递给函数,我们可以修改其值而不返回。但是,如果我传递可变对象的切片,似乎在运行函数后,该对象的值没有改变。这是我的代码:

def reverse(self, x):
    """
    :type x: int
    :rtype: int
    """
    s = list(str(x))
    if s[0] == "-":
        #if s=['-','1','2','3'], then s[1:]=['1','2','3'], after running self.reverseCore, s still is ['-','1','2','3']
        print(id(s[1:]))
        self.reverseCore(s[1:])
        print(s)
    else:
        #if s=['1','2','3'], after running self.reverseCore, s will be['3','2','1']
        self.reverseCore(s)
        print(s)
def reverseCore(self, s):
    print(id(s))
    if len(s)<= 1:
        return
    l = len(s)
    k = l//2
    for i in range(0, k):
        s[i], s[l-i-1] = s[l-i-1], s[i]

s[1:] 也是一个可变对象,那为什么它没有改变呢?

你怎么知道s[1:]没有改变?函数返回后,您将永远无法访问它。您打印的是原始s,而不是传递给函数的切片。

切片会创建一个新列表,修改新列表对原始列表没有影响。

您可能会对此感兴趣:对列表部分的引用 - Python

最新更新