① person1 / stu1.params / print_person_info中的person指向同一块内存地址,是一个实例对象,且是可变参数类型 ② 实例对象中的name是一个列表,也是一个可变参数,因此,不管列表中的值如何改变,person1.name / stu1.params.name / print_person_info中的person.name指向同一块内存地址 ② 实例对象中的age是一个整型变量,是一个不可变参数,因此,person1.age / stu1.params.age / print_person_info中的person.age改变后指向了不同的内存地址
参考文章:python变量值的变化原理,函数内外参数为何同时变化?(可变变量,不可变变量和地址分配的分析)_python一个变量改变影响另一个变量-CSDN博客
class Person:
def __init__(self, name: list, age):
self.name = name
self.age = age
class Student:
def __init__(self, person: Person):
self.params = person
print(id(self.params), id(self.params.age), id(self.params.name))
def print_person_info(person: Person):
print(id(person), id(person.age), id(person.name))
person.age = person.age + 5
person.name.append("Lily")
print(f"Name: {person.name}, Age: {person.age}")
print(id(person), id(person.age), id(person.name))
person1 = Person(["Alice", "Bob"], 30)
print(f"Name: {person1.name}, Age: {person1.age}")
print(id(person1), id(person1.age), id(person1.name))
stu1 = Student(person1)
print(id(stu1.params), id(stu1.params.age), id(stu1.params.name))
print_person_info(person1)
Name: ['Alice', 'Bob'], Age: 30
2083263821472 1962914912 2083328470984
2083263821472 1962914912 2083328470984
2083263821472 1962914912 2083328470984
2083263821472 1962914912 2083328470984
Name: ['Alice', 'Bob', 'Lily'], Age: 35
2083263821472 1962915072 2083328470984