首页 > 解决方案 > 如果一个 list1 包含 list2 的一些元素。如果 list2 发生变化, list1 也会发生变化吗?

问题描述

这就是我想要创造的。

list2 =[1,2,3];

list1= [list2[0],list2[1]];

list2[0]=2;

print(list1);

我希望输出为 [2,2] 而不是 [1,2]

标签: arrayspython-3.xlistsudoku

解决方案


Python 中的整数是不可变的。这是您对列表所期望的行为,但这是不可能的。考虑这个例子:

x = 0
y = 0
print(id(x), id(y))
y = 1
print(id(y))

输出:

94583099374048 94583099374048
94583099374080

而列表是可变的:

a_list = ["a",
                 "b",
                 "c",
                 "d",
                 "e",
                 "f"
                 ]
b_list = a_list
print("a list id before update", id(a_list))
print("b list id before update", id(b_list))

a_list += ["g"]
print("a list after update", a_list)
print("b list after update", b_list)
print("a list id after update", id(a_list))
print("b list id after update", id(b_list,))

输出:

a list id before update 139734649089472
b list id before update 139734649089472
a list after update ['a', 'b', 'c', 'd', 'e', 'f', 'g']
b list after update ['a', 'b', 'c', 'd', 'e', 'f', 'g']
a list id after update 139734649089472
b list id after update 139734649089472

这解释了您所看到的行为。list1并且list2存储在单独的内存位置,因为您没有将列表本身等同起来。list1[0]因此和之间没有联系list2[0]

注意:id()返回对象的内存地址。


推荐阅读