oursolutionarchitectoursolutionarchitect
  • Python Questions and Answers
  • Python - Programming Examples
  • Python - Quick Guide
  • Python - Useful Resources
  • Python - Discussion
    • Selected Reading
    • Q&A

    Python - Copy Dictionaries


    Since a variable in Python is merely a label or reference to an object in the memory, a simple assignment operator will not create copy of object.

    Example 1

    In this example, we have a dictionary "d1" and we assign it to another variable "d2". If "d1" is updated, the changes also reflect in "d2".

    d1 = {"a":11, "b":22, "c":33}
    d2 = d1
    print ("id:", id(d1), "dict: ",d1)
    print ("id:", id(d2), "dict: ",d2)
    
    d1["b"] = 100
    print ("id:", id(d1), "dict: ",d1)
    print ("id:", id(d2), "dict: ",d2)
    

    Output

    id: 2215278891200 dict: {'a': 11, 'b': 22, 'c': 33}
    id: 2215278891200 dict: {'a': 11, 'b': 22, 'c': 33}
    id: 2215278891200 dict: {'a': 11, 'b': 100, 'c': 33}
    id: 2215278891200 dict: {'a': 11, 'b': 100, 'c': 33}
    

    To avoid this, and make a shallow copy of a dictionary, use the copy() method instead of assignment.

    Example 2

    d1 = {"a":11, "b":22, "c":33}
    d2 = d1.copy()
    print ("id:", id(d1), "dict: ",d1)
    print ("id:", id(d2), "dict: ",d2)
    d1["b"] = 100
    print ("id:", id(d1), "dict: ",d1)
    print ("id:", id(d2), "dict: ",d2)
    

    Output

    When "d1" is updated, "d2" will not change now because "d2" is the copy of dictionary object, not merely a reference.

    id: 1586671734976 dict: {'a': 11, 'b': 22, 'c': 33}
    id: 1586673973632 dict: {'a': 11, 'b': 22, 'c': 33}
    id: 1586671734976 dict: {'a': 11, 'b': 100, 'c': 33}
    id: 1586673973632 dict: {'a': 11, 'b': 22, 'c': 33}