python中的坑

2023-08-25  本文已影响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] 列表。因此,如果你修改其中一个子列表的值,其他子列表也会受到影响,因为它们实际上引用的是相同的对象。应该使用列表推导或循环来逐个创建新的子列表,以确保每个子列表都是独立的对象,而不是共享同一个对象。

上一篇下一篇

猜你喜欢

热点阅读