diff --git a/src/engine/target.js b/src/engine/target.js
index 312f1319e..4be0774a2 100644
--- a/src/engine/target.js
+++ b/src/engine/target.js
@@ -354,7 +354,11 @@ class Target extends EventEmitter {
                 originalVariable.type,
                 originalVariable.isCloud
             );
-            newVariable.value = originalVariable.value;
+            if (newVariable.type === Variable.LIST_TYPE) {
+                newVariable.value = originalVariable.value.slice(0);
+            } else {
+                newVariable.value = originalVariable.value;
+            }
             return newVariable;
         }
         return null;
diff --git a/test/unit/engine_target.js b/test/unit/engine_target.js
index 9fa83c94b..5d899399f 100644
--- a/test/unit/engine_target.js
+++ b/test/unit/engine_target.js
@@ -323,6 +323,19 @@ test('duplicateVariable creates a new variable with a new ID by default', t => {
     t.end();
 });
 
+test('duplicateVariable creates new array reference for list variable.value', t => {
+    const target = new Target();
+    const arr = [1, 2, 3];
+    target.createVariable('a var ID', 'arr', Variable.LIST_TYPE);
+    const originalVariable = target.variables['a var ID'];
+    originalVariable.value = arr;
+    const newVariable = target.duplicateVariable('a var ID');
+    // Values are deeply equal but not the same object
+    t.deepEqual(originalVariable.value, newVariable.value);
+    t.notEqual(originalVariable.value, newVariable.value);
+    t.end();
+});
+
 test('duplicateVariable creates a new variable with a original ID if specified', t => {
     const target = new Target();
     target.createVariable('a var ID', 'foo', Variable.SCALAR_TYPE);