我有2个名单:
two[0][0] = 9
当我输入这个时:
one: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
two: [[9, 2, 2, 3], [3, 4, 4, 5], [3, 4, 4, 5], [5, 6, 6, 7]]
它是这样的:
one: [[9, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
two: [[9, 2, 2, 3], [3, 4, 4, 5], [3, 4, 4, 5], [5, 6, 6, 7]]
当我更改'two'列表中的元素时,如何在'one'列表中获得与'two'列表中相同的更改,以便:
var foo = {
"prop1" : "value2",
"prop2" : "value3",
"prop3" : "value4"
};
答案 0 :(得分:1)
整数在python中是不可变的。您可以采用的一种方法是将整数括在容器类型(列表)中并修改容器值。
有关相关详细信息,请参阅以下附加指示:
答案 1 :(得分:1)
这里的问题正如其他解释的那样,int对象是不可变的 这样做
two[0][0] = 9
不会改变旧的两个[0] [0]对象,而是会创建新对象并使两个[0] [0]引用这个新对象(旧对象是垃圾收集,如果没有其他参考它在这种情况下那里是)
并且在创建两个数组之后更清楚,我们有以下( - >意味着参考)
one[0][0] --> object(1)
two[0][0] --> object(1)
然后当你执行
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
答案 2 :(得分:0)
您实际上是在复制这些值。
将引用复制到一个列表中:
two=[one[0], one[1], one[2], one[3]]
然后你得到two[0][0]=9
:
one == [[9, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
two == [[9, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
答案 3 :(得分:0)
这是你想要完成的吗?
// NOTE: the numbers here don't represent order,
// they are just to ensure proper serialization
public enum Level
{
AmazingPlan = 4, // new level
Aquarium = 0,
Crescendo = 1,
HungarianDance = 2,
MapleLeafRag = 3,
}