Python Coding challenge - Day 181 | What is the output of the following Python Code?

Code:

x = {"name": "John", "age": 30}

y = x.copy()

x["name"] = "Jane"

print(y["name"])

Solution and Explanation:

Let's break down each step:

x = {"name": "John", "age": 30}:
This line initializes a dictionary x with two key-value pairs: "name" with the value "John" and "age" with the value 30. So, x becomes {"name": "John", "age": 30}.
y = x.copy():
Here, you're creating a copy of the dictionary x and assigning it to y. This creates a new dictionary y with the same key-value pairs as x.
Importantly, this is a shallow copy, meaning it copies the references to the objects rather than creating new objects. In this case, since the values are immutable (strings and integers), it behaves as expected. If the values were mutable objects like lists or dictionaries, modifying them in one copy would affect the other as well.
x["name"] = "Jane":
This line changes the value associated with the key "name" in the original dictionary x from "John" to "Jane". So, x becomes {"name": "Jane", "age": 30}.
print(y["name"]):
Here, you're printing the value associated with the key "name" in the dictionary y.
Despite changing the value associated with the key "name" in the original dictionary x, the value associated with the key "name" in the copied dictionary y remains unchanged.
This is because y is a separate copy of x created before the modification, so changes to x after the copy won't affect y.
Therefore, print(y["name"]) will output "John", not "Jane", since y retains the original values before the modification of x.
In summary, x and y start as identical dictionaries. Modifying x after creating y doesn't affect the contents of y because y is an independent copy made before the modification.