我不知道这里出了什么问题,我相信这里有人能帮上忙。我有一个列表mylst
(列表列表),它被复制并传递到方法foo
。foo
遍历列表,用传入的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}$
你不能再复制我的列表了。两次调用foo时,都传递相同的对象引用并修改同一个列表。在
lst[:]
技巧可以复制一个级别的列表。您有嵌套的列表,因此您可能需要查看一下^{特别是:
相关问题 更多 >
编程相关推荐