如何在不更改list1的值的情况下更改list2的值。更改list2数据将更新list1数据。
var list = [1,2,3];
var list1;
var list2;
list1 = list;
list2 = list;
list2[0] = 100;
print(list1); //output [100, 2, 3] // need this to be [1,2,3]
print(list2); //output [100, 2, 3]
答案 0 :(得分:2)
对象通过引用传递。当您执行list1 = list;
和list2 = list;
时,会将list
的引用同时分配给list1
和list2
。因此,更改该引用处的对象将更改您在所有这些不同变量中看到的数据。
如果要分别修改这些对象,则需要创建一个新的List
实例。可以使用List.of
或带有扩展运算符的List
文字来完成此操作。
list2 = List.of(list);
或
list2 = [...list];
如果仅对list2
执行此操作,则list1
和list
仍然相同,即使您只更改一个。
var list = [1, 2, 3];
var list1;
var list2;
list1 = list;
list2 = [...list];
list2[0] = 100;
list1[0] = 200;//list1 is changed here
//But `list` will be changed as well as shown below
print(list); //output [200,2,3]
print(list1); //output [200,2,3]
print(list2); //output [100,2,3]
如果您希望将这些List
中的每一个完全分开,则需要使用List.of
或List
和{{ 1}}。
答案 1 :(得分:0)
使用List.of
构造函数将elements
的所有list
分配给list2
。
添加了一个示例:
var list = [1, 2, 3];
var list1;
var list2;
list1 = list;
// use List.of
list2 = List.of(list1);
list2[0] = 100;
print(
list1); //output [1,2,3]
print(list2); //output [100,2,3]