美文网首页
python中的坑

python中的坑

作者: 乔一波一 | 来源:发表于2023-08-25 19:48 被阅读0次

    两种初始化二维列表的方式

    第一种正确的

            dp = [[0] * (b + 1) for _ in range(len(nums))]
            print(dp)
            for i in range(len(nums)):
                dp[i][0] = 0
    
            for j in range(b + 1):
                if j >= nums[0]:
                    dp[0][j] = nums[0]
            print(dp)
    

    此时打印的结果是正常的:


    正确初始化方式

    第二种错误的

            dp = [[0] * (b + 1)] * len(nums)
            print(dp)
            for i in range(len(nums)):
                dp[i][0] = 0
    
            for j in range(b + 1):
                if j >= nums[0]:
                    dp[0][j] = nums[0]
            print(dp)
    

    此时打印的结果是错误的:


    错误初始化方式

    原因

    在 Python 中,当你使用 [value] * n 创建一个列表时,这个列表中的每个元素实际上都指向同一个对象 value。这意味着在你的代码中,所有的子列表都引用同一个 [0, 0, 0, ..., 0] 列表。因此,如果你修改其中一个子列表的值,其他子列表也会受到影响,因为它们实际上引用的是相同的对象。应该使用列表推导或循环来逐个创建新的子列表,以确保每个子列表都是独立的对象,而不是共享同一个对象。

    相关文章

      网友评论

          本文标题:python中的坑

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