正如其他人所解释的,这里的问题是int对象是不可变的
真的吗two[0][0] = 9
不会更改旧的two[0][0]对象,而是创建新对象,并使两个[0][0]引用这个新对象(如果没有其他对象引用,则旧对象被垃圾回收)
在创建两个数组之后,为了更清楚地说明这一点,我们使用了以下方法(-->;表示引用)
^{pr2}$
当你执行two[0][0] = 9
对象引用如下所示one[0][0] --> object(1)
two[0][0] --> object(9)
所以要解决这个问题,我们需要将数组中的值更改为可变的
我已经创建了一个非常简单的类来保存int并用它生成数组,这就解决了您的问题
这是工作代码class IntHolder:
def __init__(self,int_value):
self.intvalue = int_value
def set_value(self,int_value):
self.intvalue = int_value
def __str__(self):
return str(self.intvalue)
def __repr__(self):
return str(self.intvalue)
def __str__(self):
return str(self.intvalue)
one = [
[IntHolder(1), IntHolder(2), IntHolder(3), IntHolder(4)],
[IntHolder(2), IntHolder(3), IntHolder(4), IntHolder(5)],
[IntHolder(3), IntHolder(4), IntHolder(5), IntHolder(6)],
[IntHolder(4), IntHolder(5), IntHolder(6), IntHolder(7)]
]
two = [
[one[0][0], one[0][1], one[1][0], one[1][1]],
[one[0][2], one[0][3], one[1][2], one[1][3]],
[one[2][0], one[2][1], one[3][0], one[3][1]],
[one[2][2], one[2][3], one[3][2], one[3][3]]
]
two[0][0].set_value(9)
print one
print two