#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相等~~
这种问题好多人都遇到,懒得再说一遍了,看链接: https://groups.google.com/d/msg/python-cn/CDV1D7vdq6E/0EO9kjVU4dcJ