I'm writing Leetcode 113 (Path Sum II) today and find out the big difference between l = l[:-1]
and l.pop()
expecially if you need to use it in recursive function.
Long story short, I thought they're the same that if I do either inside a function where l
is a passed in parameter. I was assuming the caller function's l
will be changed whichever way. But apparently they're not.
A simply verification is:
def f(lst):
lst = lst[:-1]
print("Inside f:", lst)
x = [1, 2, 3]
f(x)
print("Outside f:", x)
And the output is:
Inside f: [1, 2]
Outside f: [1, 2, 3]
For l = l[:-1]
, what really happens is l[:-1]
creates a new list. =
rebinds **the local variable l
to the new list. The rebinds does **not affect the object list in the calling function. Even though the variable has the same name, it's just a new local reference, and the original list object is untouched.
Top comments (0)