Previously. Pointers employed in Python, they are just hidden.
#!/usr/bin/env python3
def f(x):
x.append(123)
foo=[]
f(foo)
f(foo)
print (foo)
[123, 123]
What you see here is called call by reference (rather than by value). A pointer is passed rather than a whole list. You can use dictionary or set instead. It's like to pass a pointer to an object in pure C or C++.
This is useful when you have a function that add some data to a global list.
Compare:
#!/usr/bin/env python3
def f():
lst=[]
lst.append(123)
lst.append(456)
return lst
foo=[]
foo=foo+f()
foo=foo+f()
print (foo)
With:
#!/usr/bin/env python3
def f(out):
out.append(123)
out.append(456)
foo=[]
f(foo)
f(foo)
print (foo)
In the second example, f() adds data directly to a list, pointer to which was passed. No need for additional list copying.
This can create a problem, however: f() can garble the list in a way that will be slightly harder to debug.

Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.