Table of Contents Hide
In Python, strings are immutable, which means we cannot change certain characters or the text of a string using the assignment operator. If you try to change the string value, the Python interpreter will raise
'str' object does not support item assignment error.
How to Reproduce the Error
Let us take a simple example to demonstrate this issue.
In the following code, we are accepting a username as an input parameter. If the username consists of non-alphanumeric characters, we are trying to replace those characters in a string with an empty character.
username = input("Enter a username: ") for i in range(len(username)): if not username[i].isalnum(): username[i] = "" print(username)
Enter a username: ^*P&YTHON Traceback (most recent call last): File "c:\Personal\IJS\Code\prgm.py", line 4, in <module> username[i] = "" TypeError: 'str' object does not support item assignment
We get the
TypeError because we tried to modify the string value using an assignment operator. Since strings are immutable, we cannot replace the value of certain characters of a string using its index and assignment operator.
How to Fix the Error
Since strings are mutable, we need to create a newly updated string to get the desired result. Let us take an example of how a memory allocation happens when we update the string with a new one.
text1 = "ItsMyCode" text2 = text1 print("Memory Allocation ", id(text1)) print("Memory Allocation ", id(text2)) text1 = "ItsMyCode Python" print("Memory Allocation ", id(text1)) print("Memory Allocation ", id(text2))
Memory Allocation 1999888980400 Memory Allocation 1999888980400 Memory Allocation 1999889178480 Memory Allocation 1999888980400
In the above code, notice that when we change the content of the text1 with an updated string, the memory allocation too got updated with a new value; however, the text2 still points to the old memory location.
We can solve this issue in multiple ways. Let us look at a few better solutions to handle the scenarios if we need to update the string characters.
Solution 1 – Create a new string by iterating the old string
The simplest way to resolve the issue in the demonstration is by creating a new string.
We have a new string called
username_modified, which is set to empty initially.
Next, using the for loop, we iterate each character of the string, check if the character is a non-alphanumeric value, and append the character to a new string variable we created.
username = input("Enter a username: ") username_modified = "" for i in range(len(username)): if username[i].isalnum(): username_modified += username[i] print(username_modified)
Enter a username: ^*P&YTHON PYTHON
Solution 2- Creating a new string using a list
Another way is to split the string characters into a list, and using the index value of a list; we can change the value of the characters and join them back to a new string.
text = "ItsMyCode Cython Tutorial" # Creating list of String elements lst = list(text) print(lst) # Replace the required characters in the list lst = "P" print(lst) # Use join() method to concatenate the characters into a string. updated_text = "".join(lst) print(updated_text)
['I', 't', 's', 'M', 'y', 'C', 'o', 'd', 'e', ' ', 'C', 'y', 't', 'h', 'o', 'n', ' ', 'T', 'u', 't', 'o', 'r', 'i', 'a', 'l'] ['I', 't', 's', 'M', 'y', 'C', 'o', 'd', 'e', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', 'T', 'u', 't', 'o', 'r', 'i', 'a', 'l'] ItsMyCode Python Tutorial
TypeError: 'str' object does not support item assignment error occurs when we try to change the contents of the string using an assignment operator.
We can resolve this error by creating a new string based on the contents of the old string. We can also convert the string to a list, update the specific characters we need, and join them back into a string.