Shared Reference in Python
Last Updated :
14 Mar, 2024
Let, we assign a variable x to value 5, and another variable y to the variable x.
Python3
When Python looks at the first statement, what it does is that, first, it creates an object to represent the value 5. Then, it creates the variable x if it doesn't exist and made it a reference to this new object 5. The second line causes Python to create the variable y, and it is not assigned with x, rather it is made to reference that object that x does. The net effect is that the variables x and y wind up referencing the same object. This situation, with multiple names referencing the same object, is called a
Shared Reference in Python.
Now, if we write:
Python3
This statement makes a new object to represent 'Geeks' and makes x to reference this new object. However, y still references the original object i.e 5. Again if we write one more statement as:
Python3
b
This statement causes the creation of a new object and made y to reference this new object. The space held by the prior object is reclaimed if it is no longer referenced, that is, the object's space is automatically thrown back into the free space pool, to be reused for a future object.
This automatic reclamation of object's space is known as
Garbage Collection.
Shared reference and In- place changes
There are objects and operations that perform in-place object changes. For example, an assignment to an element in a list actually changes the list object itself in-place, rather than creating a new list object. For objects that support in-place changes, you need to be very careful of shared reference, as a change in one can affect others.
Python3
L1 = [1, 2, 3, 4, 5]
L2 = L1
Just like x and y, L1 and L2, after statement 2, will refer to the same object. If we change the 0th place value in L1, Now think what will happen, whether it will change only L1 or both L1 and L2 ?
Python3
L1 = [1, 2, 3, 4, 5]
L2 = L1
L1[0] = 0
print(L1)
print(L2)
Output:
[0, 2, 3, 4, 5]
[0, 2, 3, 4, 5]
Thus, the change in L1 reflects back to L2. Rather than creating a new object for L1, it overwrites the part of the list object at that place. This is an in-place change. If we still want to maintain a separate copy for L2 such that any changes in L1 doesn't reflect in L2, then we can request Python to create a copy of the list L1 for L2.
Python3
L1 = [1, 2, 3, 4, 5]
L2 = L1[:]
L1[0] = 0
print(L1)
print(L2)
Output:
[0, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Note: This slicing technique doesn't work for dictionaries and sets.
Because of Python's reference model, there are two different ways to check for equality in Python Program.
Python3
L1 = [1, 2, 3, 4, 5]
L2 = L1
print(L1 == L2)
print(L1 is L2)
Output:
True
True
The first method, the
==
operator tests whether the referenced objects have the same values, if they have the same values, it returns True, otherwise False. The second method, the
is operator
, instead tests for object identity - it returns True only if both names point to the exact same object, so basically it is a much stronger form of equality testing. It serves as a way to detect shared references in your code if required. It returns False if the names point to an equivalent but different objects.
Now, here comes a tricky part:
Look at the following code,
Python3
L1 = [1, 2, 3, 4, 5]
L2 = [1, 2, 3, 4, 5]
print(L1 == L2)
print(L1 is L2)
Output:
True
False
What will happen if we perform the same operation on small numbers:
Python3
a = 50
b = 50
print(a == b)
print(a is b)
Output:
True
True
Because small integers and strings are cached and reused, therefore they refer to a same single object. And since, you cannot change integers or strings in-place, so it doesn't matter how many references there are to the same object.
Similar Reads
Python - Add Set Items Python sets are efficient way to store unique, unordered items. They provide various methods to add elements ensuring no duplicates are present. This article explains how to add items to a set in Python using different methods:Add single set item using add() MethodThe add() method allows you to add
2 min read
Uses of OS and Sys in Python In this article, we will see where we use Os and Sys in Python with the help of code examples. What is Os Module?Python OS module in Python furnishes a versatile means of engaging with the operating system. It facilitates a range of operations, including the creation, deletion, renaming, movement, a
4 min read
How to copy a string in Python Creating a copy of a string is useful when we need a duplicate of a string to work with while keeping the original string intact, strings in Python are immutable which means they can't be altered after creation, so creating a copy sometimes becomes a necessity for specific use cases.Using SlicingSli
2 min read
Understanding the Execution of Python Program This article aims at providing a detailed insight into the execution of the Python program. Let's consider the below example. Example: Python3 a = 10 b = 10 print("Sum ", (a+b)) Output: Sum 20 Suppose the above python program is saved as first.py. Here first is the name and .py is the exte
2 min read
Run One Python Script From Another in Python In Python, we can run one file from another using the import statement for integrating functions or modules, exec() function for dynamic code execution, subprocess module for running a script as a separate process, or os.system() function for executing a command to run another Python file within the
5 min read
Python Data Structures Practice Problems Python Data Structures Practice Problems page covers essential structures, from lists and dictionaries to advanced ones like sets, heaps, and deques. These exercises help build a strong foundation for managing data efficiently and solving real-world programming challenges.Data Structures OverviewLis
1 min read
File Locking in Python File locking in Python is a technique used to control access to a file by multiple processes or threads. In this article, we will see some generally used methods of file locking in Python. What is File Locking in Python?File locking in Python is a technique used to control access to a file by multip
2 min read
How Can I Make One Python File Run Another File? In Python programming, there often arises the need to execute one Python file from within another. This could be for modularity, reusability, or simply for the sake of organization. In this article, we will explore different approaches to achieve this task, each with its advantages and use cases. Ma
2 min read
Python - Check if all elements in List are same To check if all items in list are same, we have multiple methods available in Python. Using SetUsing set() is the best method to check if all items are same in list. Pythona = [3, 3, 3, 3] # Check if all elements are the same result = len(set(a)) == 1 print(result) OutputTrue Explanation:Converting
3 min read
Python | Check if two lists have any element in common Checking if two lists share any common elements is a frequent requirement in Python. It can be efficiently handled using different methods depending on the use case. In this article, we explore some simple and effective ways to perform this check.Using set IntersectionSet intersection uses Python's
3 min read