Does Python do slice-by-reference on strings?

I want to know if when I do something like

a = "This could be a very large string..."
b = a[:10]

a new string is created or a view/iterator is returned

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Python does slice-by-copy, meaning every time you slice (except for very trivial slices, such as a[:]), it copies all of the data into a new string object.

According to one of the developers, this choice was made because

The [slice-by-reference] approach is more complicated, harder to implement
and may lead to unexpected behavior.

For example:

a = "a long string with 500,000 chars ..."
b = a[0]
del a

With the slice-as-copy design the string a is immediately freed. The
slice-as-reference design would keep the 500kB string in memory although
you are only interested in the first character.

Apparently, if you absolutely need a view into a string, you can use a memoryview object.

Method 2

When you slice strings, they return a new instance of String. Strings are immutable objects.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x