2

I'm confused about this.

Say I have a function that is called everythird, and that takes a list as a parameter, and returns the every third element.

def everythird(l):
    return l[0::3]

And if I input everythird([1,2,3,4,5,6,7]) and get back [1, 4, 7]. Is that considered a new list, modified list, or neither?

Also do methods modify or create new lists? What about splicing?

4

1 に答える 1

3

スライスは浅いコピーを作成します。これは別のリストですが、要素は同じです。これは、元の要素に影響を与えずに要素を追加したり、インデックスによって要素をリセットしたりできることを意味しますが、要素を変更すると、その効果は元の要素に反映されます。

要素は不変であるため、これに気付くことはありませんが、次の点を考慮してください。

>>> 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 のもので、 orlist.copyと同等です。seq[:]list(seq)

于 2013-06-16T01:59:28.153 に答える