Jon Forrest <nob...@gmail.com> writes: > I'm learning about Python. A book I'm reading about it > says "... > a string in Python is a sequence.
correct. > A sequence is an ordered collection of objects". correct. https://docs.python.org/3/glossary.html#term-sequence > This implies that each character in a string > is itself an object. Everything in Python is an object. If *s* is a name that refers to a str object then *s[i]* returns i-th Unicode code point from the string as a str object of length 1: >>> s = "ab" >>> s[0] 'a' It does not matter how *s* is represented internally on a chosen Python implementation: *s[0]* may return an existing object or it may create a new one on-the-fly. Here's a perfectly valid sequence of ten squares: >>> class Squares: ... def __getitem__(self, i): ... if not (-len(self) <= i < len(self)): ... raise IndexError(i) ... if i < 0: ... i += len(self) ... return i * i ... ... def __len__(self): ... return 10 >>> s = Squares() >>> s[9] 81 All 10 squares are generated on-the-fly (though all int objects already exist due to the small int caching on CPython). -- https://mail.python.org/mailman/listinfo/python-list