今天做了个实验,代码是这样的:
=== data.py ===
class Data:
def __init__(self):
self.base_x = 123
=== plugin.py ===
class Plugin:
def __init__(self, para, data):
self.para = para
self.data = data
self.data.para = para
def remove(self):
del self.data.para
=== main.py ===
from data import Data
from plugin import Plugin
dd = Data()
pp = Plugin(999, dd)
print dd.base_x
print dd.para
pp.remove()
print dd.para
== 输出结果是这样的:==
123
999
Traceback (most recent call last):
File "C:\test\main.py", line 11, in <module>
print dd.para
AttributeError: Data instance has no attribute 'para'
[Finished in 0.1s with exit code 1]
那么 Plugin 的对象 pp 的初始化函数参数 data,实际上是 Data 类 dd 的实际指针。所以我执行 del self.data.para 后 dd 也就没有这个属性了。
这样的话 pp.data 实际和 main 中的 dd 指向的都是同一个对象。
请问各位 v2exer 们,有关 python 传递参数这种对象循环传递,以及函数参数是引用还是拷贝的知识在哪里能有介绍?
欢迎讨论
=== data.py ===
class Data:
def __init__(self):
self.base_x = 123
=== plugin.py ===
class Plugin:
def __init__(self, para, data):
self.para = para
self.data = data
self.data.para = para
def remove(self):
del self.data.para
=== main.py ===
from data import Data
from plugin import Plugin
dd = Data()
pp = Plugin(999, dd)
print dd.base_x
print dd.para
pp.remove()
print dd.para
== 输出结果是这样的:==
123
999
Traceback (most recent call last):
File "C:\test\main.py", line 11, in <module>
print dd.para
AttributeError: Data instance has no attribute 'para'
[Finished in 0.1s with exit code 1]
那么 Plugin 的对象 pp 的初始化函数参数 data,实际上是 Data 类 dd 的实际指针。所以我执行 del self.data.para 后 dd 也就没有这个属性了。
这样的话 pp.data 实际和 main 中的 dd 指向的都是同一个对象。
请问各位 v2exer 们,有关 python 传递参数这种对象循环传递,以及函数参数是引用还是拷贝的知识在哪里能有介绍?
欢迎讨论
