在Python中关于类的地址及传参问题

今天小渣小孙,又遇到了一个问题,作为一个编程新手,并且从来没有系统学过Python的同学中的一员,小渣小孙猜想大概很多同学都会有这样的疑惑:

(2)如果将类赋值给一个变量,然后这个变量又赋值给另外一个变量,这个类会不会产生联动变化

1关于赋值

首先,我们先定义一个简单的类:

class A:
    def __init__(self):
        self.A_1=[]

    def _add(self,a):
        self.A_1.append(a)

    def _del(self):
        if self.A_1!=[]:
            del self.A_1[-1]

然后,当我们将K[1]赋值给A时,心里想一下地址是变化了还是没变:

K=[]
for i in range(5):
    a=A()
    a._add(1)
    K.append(a)

a=A()
A=K[1]
A._add(1)
K.append(A)

首先,我们先断点看看运行情况:

先给出for循环后,K中存储的地址情况:

然后,看看A的地址情况,可以看出A的地址是没有变的哈,还是K[1]中的地址

现在我们想让他变怎么办:采用copy,看看由这个代码生产的地址是否变了:

import copy
class A:
    def __init__(self):
        self.A_1=[]

    def _add(self,a):
        self.A_1.append(a)

    def _del(self):
        if self.A_1!=[]:
            del self.A_1[-1]

K=[]
for i in range(2):
    a=A()
    a._add(1)
    K.append(a)

a=A()
A=copy.copy(K[1])
A._add(1)
K.append(A)
print(K)

由输出可以看出,很明显变了哈:

注:这是一条刷文章数的博文,哇咔咔,哈哈哈,不过希望能提供给需要的人呀!!!

猜你喜欢

转载自blog.csdn.net/crazy_girl_me/article/details/115034141