类的实例对象作为参数进行传递的时候,算是一个可变参数

① 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

                
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值