Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do different strings have the same ID in Python? [duplicate]

Tags:

python

It is stated that strings are immutable objects, and when we make changes in that variable it actually creates a new string object.

So I wanted to test this phenomenon with this piece of code:

result_str = ""

print("string 1 (unedited):", id(result_str))

for a in range(1,11):
    result_str = result_str + str(a)
    print(f"string {a+1}:", id(result_str))

And I got the following IDs:

string 1 (unedited): 2386354993840
string 2: 2386357170336
string 3: 2386357170336
string 4: 2386357170336
string 5: 2386357170336
string 6: 2386357170336
string 7: 2386357170336
string 8: 2386357170336
string 9: 2386360410800
string 10: 2386360410800
string 11: 2386360410800

So, if each string is different from each other, then why do the strings 2-8 and 9-11 have the same ID? And, if somehow this question is explained why does the ID change at string 9 specifically?

like image 298
Frenk Frenk Avatar asked Jun 18 '20 15:06

Frenk Frenk


People also ask

Can the id of two objects be the same Python?

Two objects with non-overlapping lifetimes may have the same id() value.

Why id is different in Python?

Each and every object in Python when stored into the memory is being allocated a unique identification number that helps the Python compiler to perform better and utilize memory efficiently. Each object has its own unique identity assigned to it as an integer number which differentiates it from other objects.

Is id unique in Python?

It is unique so long as each unique sequence comes from only a single invocation of uniqueid. there is no guarantee of uniqueness across generators.

How do you check if a string is the same as another string Python?

String Equals Check in Python In python programming we can check whether strings are equal or not using the “==” or by using the “. __eq__” function. Example: s1 = 'String' s2 = 'String' s3 = 'string' # case sensitive equals check if s1 == s2: print('s1 and s2 are equal.

Can two variables in Python have the same IDs?

Two variables in Python have same id, but not lists or tuples. Two variables in Python have the same id: If I take two lists: according to this link Senderle answered that immutable object references have the same id and mutable objects like lists have different ids. So now according to his answer, tuples should have the same ids - meaning:

How to check if all characters in a string are same in Python?

Given a list of strings, write a Python program to check whether each string has all the characters same or not. Given below are a few methods to check the same. Method #1: Using Naive Method [Inefficient] ini_list = ["aaaaaaaaaaa", "aaaaaaabaa"]

How to compare if two strings are equal in Python?

Another way of comparing if two strings are equal in Python is using the is operator. However, the kind of comparison it performs is different than ==. The is operator compare if the 2 string are the same instance. In Python—and in many other languages—we say two objects are the same instance if they are the same object in memory.

Why do two integers with the same values have the same ID?

In Python, why do two integers with the same values have the same ID? Are they referring to the same object? For small integers (I think the CPython range is -5 to 256), then yes - Integer objects are shared. This is done entirely to save space. For example the Integer object for 0 is shared 19,425 times in the Python interactive console.


1 Answers

The string you associate with result_str create reaches end of lifetime at the next assignment. Hence the possibility of duplicate id.

Here's the doc

Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.

like image 71
Balaji Ambresh Avatar answered Oct 20 '22 18:10

Balaji Ambresh