Python复制列表问题

2024-10-03 13:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道这里出了什么问题,我相信这里有人能帮上忙。我有一个列表mylst(列表列表),它被复制并传递到方法foofoo遍历列表,用传入的var替换行中的第一个元素,并返回修改后的列表。我把清单打印出来,我看到它给了我我所期望的。我用mylst的另一个副本和一个不同的传入变量再次重复这个过程。因此,两个返回的列表应该是不同的;但是当我再次检查第一个列表时,我发现它现在是第二个列表,而且{}也已更改为第二个列表的列表。我没有正确复制列表吗?我用mylst[:]方法复制它。另一个有趣的观察是,所有的列表id都是不同的。这不就意味着这张单子和其他的不一样吗?这是我的问题的一个例子。在

def printer(lst):
    print "--------------"
    for x in lst:
        print x
    print "--------------\n"

def foo(lst, string):

    for x in lst:
        x[0] = string

    print "in foo"
    for x in lst:
        print x
    print "in foo\n"

    return lst

mylst = [[1, 2, 3], [4, 5, 6]]
print "mylst", id(mylst), "\n"

first = foo(mylst[:], "first")
print "first", id(first)
printer(first) # Correct

second = foo(mylst[:], "second")
print "second", id(second)
printer(second) # Correct

print "first", id(first)
printer(first) # Wrong

print "mylst", id(mylst)
printer(mylst) # Wrong

这是我电脑上的打印件

^{pr2}$

Tags: 方法inid列表forstringfoodef
2条回答

你不能再复制我的列表了。两次调用foo时,都传递相同的对象引用并修改同一个列表。在

lst[:]技巧可以复制一个级别的列表。您有嵌套的列表,因此您可能需要查看一下^{}标准模块提供的服务。在

特别是:

first = foo(copy.deepcopy(mylst), "first")

相关问题 更多 >