[Python]Pass by what?

i just started learning Python, and I’m really confused on how it’s arguments are passed…
I’ve read that it is passed-by-reference, but strings and ints are passed-by-value because they are “immutable”?
i’ve been Googling for a couple of minutes now, but i’ve just gotten more confused.
could someone clear this up this to me?
what/which are immutable or mutable types?
what if I want to pass a string/int by reference, how would I do that?

Lists and dictionaries are mutable. Strings, integers, and tuples are immutable. Variables merely reference objects in memory. Objects can be anything, strings, integers, tuples, list, dictionaries, custom classes, etc., variables merely reference them. Variables do not hold any data of any sort besides a pointer to an object somewhere.

To pass a string “by reference” you would simply do:

def myFunction(variable):
   variable += "spam"
   return variable

test = "Ni!"
test = myFunction(test)
print test

Since strings are immutable you cannot change them, you can only reassign them, like this script does. Passing mutable variables by reference can be tricky and personally I consider it to be bad coding practice. Python should be succinct, but it should also be easy to understand and normally modifying lists and dictionaries by reference in a function is very confusing for someone else to read. And when you and other people are reusing code, readability is paramount.