V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
18870715400
V2EX  ›  Python

关于创建列表方式的一个疑问

  •  
  •   18870715400 · 2020-07-13 16:55:38 +08:00 · 1099 次点击
    这是一个创建于 1382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天在做动态规划的时候创建二维列表的时候发现了一个疑问, 代码如下

    def func(N, total_weight):
        weight = [1, 2, 3, 4]
        value = [2, 4, 4, 5]
        dp = [[0 for i in range(total_weight+1)] for j in range(N+1)]
        print(dp)
        # dp = [[0] * (total_weight + 1)] * (N+1)
        # print(dp)
        for i in range(1, N + 1):
            for j in range(1, total_weight + 1):
                if j >= weight[i - 1]:
                    value1 = dp[i - 1][j - weight[i - 1]] + value[i - 1]
                    dp[i][j] = max(value1, dp[i - 1][j])
                else:
                    dp[i][j] = dp[i - 1][j]
        return dp
    
    func(4, 6)
    

    dp = [[0 for i in range(total_weight+1)] for j in range(N+1)] 创建的列表和 dp = [[0] * (total_weight + 1)] * (N+1)创建的列表完全相同, 但是最后两者得到的结果完全不同, 前者使用 for 循环得到的结果最后是正确的, 为什么会这样呢???

    for 循环得到的列表值: [[0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2], [0, 2, 4, 6, 6, 6, 6], [0, 2, 4, 6, 6, 8, 10], [0, 2, 4, 6, 6, 8, 10]]

    直接乘号得到的列表值: [[0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12]]

    2 条回复    2020-07-13 17:13:05 +08:00
    pwli
        1
    pwli  
       2020-07-13 17:09:43 +08:00
    后者是浅拷贝,也就是说列表内的元素(另一个列表)指向同一个地址
    18870715400
        2
    18870715400  
    OP
       2020-07-13 17:13:05 +08:00
    @pwli 刚尝试了一下, 的确是这样, 谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3240 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:15 · PVG 21:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.