The = sign in python doesn't change the value of the LHS (well, at least as long as you don't consider object attributes) but binds or rebinds the name, so that would be more like glob operations in perl. So b = a might be interpreted as *b = *a. Then all references to @a or $a (python lists act like arrayrefs otherwise, so working with scalars might be closer) will lose the connection, meaning the assignment won't have any effect on any other structure in the code. In perl, with @a = (0,) x $n; or $a = [ (0,) x $n ];, you might have a reference to @a or $a somewhere. So I'd say python's a = [0] * n is perl's *a = \[ (@{ [0] }) x $n ];
Python variables don't act like either perl package variables or lexicals though, but rather like you had a global symbols table, and a an additionnal symbols table lexically bound to each function (so all variables in a function are visible everywhere in that function) that could hide some of the symbols of the global table.