python 两模块互相引用的问题

Python010

python 两模块互相引用的问题,第1张

如果你执行father的话,这个时候father是__main__,不是module,所以会执行到father的from son import *,这个时候python会去执行son.py,而son.py一开始就是from father import *,所以python又去执行father.py,因为father.py的一开始是from son import *,并且因为之前执行过了,所以这个时候son已经在sys.modules里面,所以python不会重新执行son.py,而只是把sys.modules里面的son返回给你,所以当执行到father.py的print(x)的时候,还没有执行son.py里面的x=6,所以会有找不到x的attribute error。

解决的办法就是最好根本不要有circular import。

常见的参数传递有 2 种:值传递和引用传递。所谓值传递,通常就是拷贝参数的值,然后传递给函数里的新变量。这样,原变量和新变量之间互相独立,互不影响。

所谓引用传递,通常是指把参数的引用传给新的变量,这样,原变量和新变量就会指向同一块内存地址。如果改变了其中任何一个变量的值,那么另外一个变量也会相应地随之改变。

在 Python 中:

变量的赋值,只是表示让变量指向了某个对象,并不表示拷贝对象给变量;而一个对象,可以被多个变量所指向。

可变对象(列表,字典,集合等等)的改变,会影响所有指向该对象的变量。

对于不可变对象(字符串、整型、元组等等),所有指向该对象的变量的值总是一样的,也不会改变。但是通过某些操作(+= 等等)更新不可变对象的值时,会返回一个新的对象。

变量可以被删除,但是对象无法被删除。