Low Orbit Flux Logo 2 D

Dart How to Copy/Clone a List

It is easy to clone or copy a list in Dart. You probably don’t want to just assign your existing list to a new variable. This would just create a reference to the original. Changing one would affect the other. Chances are you want a completely new copy so that each list can be modified independently of the other. To do this you need to create a copy as shown here.

Here are five different ways to copy or clone a list:


List a = ['x','y', 'z'];    // original list

var b = [...a];
var c = List.from(a);
var d = List.of(a);
var e = List.generate(a.length, (index) => a[index]);
var f = List.unmodifiable(a);

You can test out modifying these lists. This will show that they are each a completely new clone and not just a reference to the original.


a[1] = 'm';
b[0] = 'n';
c[0] = 'o';
d[0] = 'p';
e[0] = 'q';
//f[0] = 'r';    // can't modify

We can then verify the contents and type for each of our new lists.


print(a.runtimeType);   
print(b.runtimeType);   
print(c.runtimeType);   
print(d.runtimeType);   
print(e.runtimeType);   
print(f.runtimeType);   
print(a);
print(b);
print(c);
print(d);
print(e);
print(f);

Assign One List to Another ( Reference )

This is probably not what you want. It just creates a pointer/reference to the original list.

If you just assign one list to another it doesn’t actually create a separate copy. Both variables are really just different names for the same list. They point to the exact same data. Changing the elements in one list will also change the elements in the other.


var a = [1, 2, 3];
var b = a;

print(a[0]);
print(b[0]);

a[0] = 5;            // change the first list

print(a[0]);
print(b[0]);       // second list was updated too