美文网首页
Python 拷贝问题

Python 拷贝问题

作者: Leoshi | 来源:发表于2017-04-06 21:56 被阅读23次

先来看一段代码:

class Solution:
    def mark1(self, r, l):
        mark = []
        for i in range(r):
            mark.append([True] * l)
        return mark

    def mark2(self, r, l):
        mark = []
        ls = [True] * l
        for i in range(r):
            mark.append(ls)
        return mark

if __name__ == '__main__':
    s = Solution()
    mark1 = s.mark1(3, 3)
    print mark1
    mark1[2][1] = False
    print mark1

    mark2 = s.mark2(3, 3)
    print mark2
    mark2[2][1] = False
    print mark2

两次的输出结果一样么?
不一样的。
输出如下:

[[True, True, True], [True, True, True], [True, True, True]]
[[True, True, True], [True, True, True], [True, False, True]]
[[True, True, True], [True, True, True], [True, True, True]]
[[True, False, True], [True, False, True], [True, False, True]]

可以看到 mark2 出问题了,明明更改的是 mark[2][1],mark[0][1] 和 mark[1][1] 也改变了,问题出在mark2的

ls = [True] * l
for i in range(r):
    mark.append(ls)

也就是三行都是同一个对象,所以在更改的时候一起更改了。
Python的列表类型传递的都是引用,这里要多注意。

相关文章

网友评论

      本文标题:Python 拷贝问题

      本文链接:https://www.haomeiwen.com/subject/ovqcattx.html