python 列表赋值的问题
阿神
阿神 2017-04-17 11:33:11
[Python讨论组]
#coding:utf-8
import random

class SymMat(object):

    def __init__(self, length=4):
        self.length = length
        self.matrix = [[0]*length]*length
        values = range(length*2)
        v = random.sample(values, length)
        pprint(self.matrix)
        print '------------before'
        self.matrix[1][0:] = v

        pprint(self.matrix)


def pprint(l):
    for i in l:
        print i

sm = SymMat(5)

输出:

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
------------before
[7, 9, 4, 3, 5]
[7, 9, 4, 3, 5]
[7, 9, 4, 3, 5]
[7, 9, 4, 3, 5]
[7, 9, 4, 3, 5]

仅对列表中第一行赋值,应该仅仅改变一行的,百思不解! 问题已解决,* 赋值的时候是直接引用过去的,n个列表id相等~~

阿神
阿神

闭关修行中......

全部回复(3)
PHP中文网

这种问题好多人都遇到,懒得再说一遍了,看链接: https://groups.google.com/d/msg/python-cn/CDV1D7vdq6E/0EO9kjVU4dcJ

高洛峰

推荐一个东西,虽然1L已经说的非常清楚了,不过再次遇到问题的时候可以试试http://www.pythontutor.com/visualize.html

伊谢尔伦

对你的代码不是特别的懂,如果要只修改第一行的值,self.matrix[1][0:]这里为什么会是1,要知道self.matrix[1]代表第二行。如果你要实现只对第一行赋值可以直接写self.matrix[0] = v就可以了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号