我如何克服这个list.append问题(list.pop)

时间:2019-06-01 22:56:31

标签: python

我在list.append和list.pop中遇到了一个非常有趣的问题,如下面的代码所示

Sub CreateAndNameWorksheets()

    Dim c As Range

    Application.ScreenUpdating = False

    For Each c In Sheets("Master").Range("A2:A20")

        Sheets("Template").Copy After:=Sheets(Sheets.Count)

        With c

            ActiveSheet.Name = .Value

           .Parent.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:= _
                "'" & .Text & "'!A1", TextToDisplay:=.Text

        End With

    Next c

    Application.ScreenUpdating = True


End Sub

输出为

x = [1,2]
y = []
y.append(x)
print(y)
print("------")
x.pop()
print(y)

有什么方法可以将print(y)保持为[[1,2]] 谢谢

编辑:还有,有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

这样做的时候

y.append(x)

您要在x列表中添加对y对象的引用。当您执行x.pop()时,将对x的所有引用执行该操作,其中包括y中的引用。

要复制该列表,您可以执行

y.append(x[:])

哪个切片返回列表中的所有项目-本质上是一个副本。如果您不喜欢这种语法,并且使用的是Python 3,则可以使用

y.append(x.copy())

这在您的代码中可能会更清楚。有关复制列表的其他几种选择,请参见this answer