diff --git a/core/dictionary.cpp b/core/dictionary.cpp
index 44fce2474ff..66af6a1a9ab 100644
--- a/core/dictionary.cpp
+++ b/core/dictionary.cpp
@@ -215,7 +215,7 @@ const Variant *Dictionary::next(const Variant *p_key) const {
 	return NULL;
 }
 
-Dictionary Dictionary::copy() const {
+Dictionary Dictionary::duplicate() const {
 
 	Dictionary n;
 
diff --git a/core/dictionary.h b/core/dictionary.h
index c8177d56485..1d8ca0023ec 100644
--- a/core/dictionary.h
+++ b/core/dictionary.h
@@ -74,7 +74,7 @@ public:
 	Array keys() const;
 	Array values() const;
 
-	Dictionary copy() const;
+	Dictionary duplicate() const;
 
 	Dictionary(const Dictionary &p_from);
 	Dictionary();
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 2b99a60ba53..0284c4d866a 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -462,6 +462,7 @@ struct _VariantCall {
 	VCALL_LOCALMEM0R(Dictionary, hash);
 	VCALL_LOCALMEM0R(Dictionary, keys);
 	VCALL_LOCALMEM0R(Dictionary, values);
+	VCALL_LOCALMEM0R(Dictionary, duplicate);
 
 	VCALL_LOCALMEM2(Array, set);
 	VCALL_LOCALMEM1R(Array, get);
@@ -1607,6 +1608,7 @@ void register_variant_methods() {
 	ADDFUNC0R(DICTIONARY, INT, Dictionary, hash, varray());
 	ADDFUNC0R(DICTIONARY, ARRAY, Dictionary, keys, varray());
 	ADDFUNC0R(DICTIONARY, ARRAY, Dictionary, values, varray());
+	ADDFUNC0R(DICTIONARY, DICTIONARY, Dictionary, duplicate, varray());
 
 	ADDFUNC0R(ARRAY, INT, Array, size, varray());
 	ADDFUNC0R(ARRAY, BOOL, Array, empty, varray());
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 019e32f8473..d70f41d2e0d 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -1348,14 +1348,14 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() {
 	if (SpatialEditor::get_singleton()->is_visible()) {
 		// 3D
 		spatial_edit_state = SpatialEditor::get_singleton()->get_state();
-		Dictionary new_state = spatial_edit_state.copy();
+		Dictionary new_state = spatial_edit_state.duplicate();
 		new_state["show_grid"] = false;
 		new_state["show_origin"] = false;
 		Array orig_vp = spatial_edit_state["viewports"];
 		Array vp;
 		vp.resize(4);
 		for (int i = 0; i < vp.size(); i++) {
-			Dictionary d = ((Dictionary)orig_vp[i]).copy();
+			Dictionary d = ((Dictionary)orig_vp[i]).duplicate();
 			d["use_environment"] = false;
 			d["doppler"] = false;
 			d["gizmos"] = onion.include_gizmos ? d["gizmos"] : Variant(false);
@@ -1368,7 +1368,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() {
 	} else { // CanvasItemEditor
 		// 2D
 		canvas_edit_state = CanvasItemEditor::get_singleton()->get_state();
-		Dictionary new_state = canvas_edit_state.copy();
+		Dictionary new_state = canvas_edit_state.duplicate();
 		new_state["show_grid"] = false;
 		new_state["show_rulers"] = false;
 		new_state["show_guides"] = false;
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index 6c58de8a5a2..a580ee3a764 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -228,7 +228,7 @@ protected:
 
 		if (String(p_name) == "type") {
 
-			Dictionary dc = d.copy();
+			Dictionary dc = d.duplicate();
 			dc["type"] = p_value;
 			undo_redo->create_action(TTR("Set Variable Type"));
 			undo_redo->add_do_method(script.ptr(), "set_variable_info", var, dc);
@@ -241,7 +241,7 @@ protected:
 
 		if (String(p_name) == "hint") {
 
-			Dictionary dc = d.copy();
+			Dictionary dc = d.duplicate();
 			dc["hint"] = p_value;
 			undo_redo->create_action(TTR("Set Variable Type"));
 			undo_redo->add_do_method(script.ptr(), "set_variable_info", var, dc);
@@ -254,7 +254,7 @@ protected:
 
 		if (String(p_name) == "hint_string") {
 
-			Dictionary dc = d.copy();
+			Dictionary dc = d.duplicate();
 			dc["hint_string"] = p_value;
 			undo_redo->create_action(TTR("Set Variable Type"));
 			undo_redo->add_do_method(script.ptr(), "set_variable_info", var, dc);
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index efc5d269a6d..0791cfbdb33 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -2156,7 +2156,7 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const
 			Variant value = N->get()->get(name);
 			// Duplicate dictionaries and arrays, mainly needed for __meta__
 			if (value.get_type() == Variant::DICTIONARY) {
-				value = Dictionary(value).copy();
+				value = Dictionary(value).duplicate();
 			} else if (value.get_type() == Variant::ARRAY) {
 				value = Array(value).duplicate();
 			}
@@ -2269,7 +2269,7 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p
 		Variant value = get(name);
 		// Duplicate dictionaries and arrays, mainly needed for __meta__
 		if (value.get_type() == Variant::DICTIONARY) {
-			value = Dictionary(value).copy();
+			value = Dictionary(value).duplicate();
 		} else if (value.get_type() == Variant::ARRAY) {
 			value = Array(value).duplicate();
 		}