我对此感到困惑。
假设我有一个名为 everythird 的函数,它接受一个列表作为参数,并返回每第三个元素。
def everythird(l):
return l[0::3]
如果我输入 everythird([1,2,3,4,5,6,7]) 并返回 [1, 4, 7]。这被认为是一个新列表、修改后的列表,还是两者都不是?
方法也会修改或创建新列表吗?拼接呢?
我对此感到困惑。
假设我有一个名为 everythird 的函数,它接受一个列表作为参数,并返回每第三个元素。
def everythird(l):
return l[0::3]
如果我输入 everythird([1,2,3,4,5,6,7]) 并返回 [1, 4, 7]。这被认为是一个新列表、修改后的列表,还是两者都不是?
方法也会修改或创建新列表吗?拼接呢?
切片创建浅拷贝。这是一个不同的列表,但具有相同的元素。这意味着您可以附加到它,或者通过索引重置元素而不影响原始元素,但是如果您改变一个元素,效果将在原始元素中看到。
由于您的元素是不可变的,因此您不会注意到这一点,但请考虑以下事项:
>>> def everythird(l):
return l[0::3]
>>> x = [[1], [2], [3]]
>>> y = everythird(x)
>>> y[0].append(1)
>>> x
[[1, 1], [2], [3]]
拥有完全不同的列表的唯一方法是通过copy.deepcopy
方法也会修改或创建新列表吗?拼接呢?
list
方法通常像.append
实例本身一样就地变化,但 Python 3 例外,list.copy
它等同于seq[:]
or list(seq)
。