Python:更改列表列表中的元素

时间:2016-07-03 16:13:22

标签: python python-2.7

我有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"
};

4 个答案:

答案 0 :(得分:1)

整数在python中是不可变的。您可以采用的一种方法是将整数括在容器类型(列表)中并修改容器值。

有关相关详细信息,请参阅以下附加指示:

Python passing an integer by reference

How do I pass a variable by reference?

答案 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,
}