0

Can someone please help me understand why s[:]=s[::-1] works perfectly but s[]=s[::-1] does not?

Also, would this be considered an in-place operation (without extra memory)?

Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214
pykam
  • 1,223
  • 6
  • 16

1 Answers1

5

Because s[] is invalid syntax in Python.

By contrast, s[:] is the notation for a slice that encompasses the whole list. You could also write s = s[::-1]. The difference is that this changes the object that the name s refers to, whereas s[:] = … changes the contents of the list (and hence is in-place).

s = [1, 2, 3]
id(s)
# 4401507776

s[:] = s[::-1]
id(s)
# 4401507776

s = s[::-1]
id(s)
# 4434730272

(id gives you the “identity” of an object. Identical objects have the same ID, different objects have different IDs.)

Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214