Trouble entendiendo valores de paso y referencias en Python
Tener problemas con cuándo se cambian los objetos y cuándo no están en Python. Aquí está mi ejemplo mal ideado a continuación:
class person:
age = 21
class bar:
def __init__(self, arg1):
self.foo = arg1
self.foo.age = 23
def baz(arg1):
arg1.age = 27
def teh(arg1):
arg1 = [3,2,1]
Person1 = person()
bar1 = bar(Person1)
print Person1.age
print bar1.foo.age
baz(Person1)
print Person1.age
print bar1.foo.age
meh = [1,2,3]
teh(meh)
print meh
La salida es
23
23
27
27
[1, 2, 3]
Entonces, cuando declaramos Person1, Person1.age es 21. Una referencia a este objeto se pasa al constructor de clase de otra instancia de clase de bar, llamada bar1. Cualquier cambio realizado a esta referencia cambiará a Person1.
Este también es el caso cuando pasamos Person1 a una función normal, Person1.age ahora es igual a 27.
Pero ¿por qué esto no funciona en la variable "meh"? Ciertamente, si asignamos una variablea = meh
y cambioa = [6, 6, 6]
, entonces meh también será cambiado. Estoy confundido. ¿Hay alguna literatura sobre cómo funciona todo esto?