Skip to main content

Python Dictionary copy() Function

The Dictionary copy() method returns the Shallow copy of the specified dictionary.

Syntax​

my_dictionary.copy()

copy() Parameters​

Python Dictionary copy() function does not take any parameters.

copy() Return Value​

Python Dictionary copy() function returns the Shallow copy of the specified dictionary.

note

It does not modify the original dictionary.

Examples​

Example 1: Copy a Dictionary with copy()​

Consider this example in which:

  • original_dict.copy() creates a shallow copy of original_dict.
  • When the age key in copied_dict is modified, it does not affect original_dict because the values in the dictionaries are references to the same objects.
# create a dictionary
original_dict = {'name': 'Tom', 'age': 20}

# create a copy of the original_dict
copied_dict = original_dict.copy()

print("Original Dictionary:", original_dict)
print("Copied Dictionary:", copied_dict)

# Modifying the copied dictionary
copied_dict['age'] = 25

print("Original Dictionary after modification:", original_dict)
print("Copied Dictionary after modification:", copied_dict)

output

Original Dictionary: {'name': 'Tom', 'age': 20}
Copied Dictionary: {'name': 'Tom', 'age': 20}
Original Dictionary after modification: {'name': 'Tom', 'age': 20}
Copied Dictionary after modification: {'name': 'Tom', 'age': 25}

Example 2: Shallow Copy of a Dictionary with Mutable Values​

The copy() method creates a Shallow copy!

In the following example the values in original_dict are lists (which are mutable) and so modifying one of the lists in copied_dict also affects the corresponding list in original_dict.

original_dict = {'fruits': ['apple', 'banana'], 'vegetables': ['carrot', 'tomato']}
copied_dict = original_dict.copy()

print("Original Dictionary:", original_dict)
print("Copied Dictionary:", copied_dict)

# Modifying the copied dictionary
copied_dict['fruits'].append('orange')

print("Original Dictionary after modification:", original_dict)
print("Copied Dictionary after modification:", copied_dict)

output

Original Dictionary: {'fruits': ['apple', 'banana'], 'vegetables': ['carrot', 'tomato']}
Copied Dictionary: {'fruits': ['apple', 'banana'], 'vegetables': ['carrot', 'tomato']}
Original Dictionary after modification: {'fruits': ['apple', 'banana', 'orange'], 'vegetables': ['carrot', 'tomato']}
Copied Dictionary after modification: {'fruits': ['apple', 'banana', 'orange'], 'vegetables': ['carrot', 'tomato']}

copy() vs Assignment statement​

  • When the copy() method is used, a new dictionary is created which is filled with a copy of the references from the original dictionary.
  • When the = operator is used, a new reference to the original dictionary is created.

For example, an assignment statement does not copy objects.

old_dict = {'name': 'Tom', 'age': 25}
new_dict = old_dict
new_dict['name'] = 'xx'
print(old_dict) # Output: {'age': 25, 'name': 'xx'}
print(new_dict) # Output: {'age': 25, 'name': 'xx'}

output

{'name': 'xx', 'age': 25}
{'name': 'xx', 'age': 25}

When you execute new_dict = old_dict, you don’t actually have two dictionaries. The assignment just makes the two variables point to the one dictionary in memory.

So, when you change new_dict, old_dict is also modified. If you want to change one copy without changing the other, use copy() method.

old_Dict = {'name': 'Tom', 'age': 25}
new_Dict = old_Dict.copy()
new_Dict['name'] = 'xx'
print(old_Dict) # Output: {'age': 25, 'name': 'Tom'}
print(new_Dict) # Output: {'age': 25, 'name': 'xx'}

output

{'name': 'Tom', 'age': 25}
{'name': 'xx', 'age': 25}

Equivalent Method: Dictionary Comprehension​

An alternative way to copy a dictionary is using dictionary comprehension.

my_dictionary = {'name': 'Tom', 'age': 25}
new_dictionary = {k:v for k,v in my_dictionary.items()}
print(new_dictionary) # Output: {'age': 25, 'name': 'Tom'}

output

{'name': 'Tom', 'age': 25}