好吧,我只是在学习 Python,并且遇到了一些奇怪的行为。我猜垃圾收集器对此负责,但我不确定。
抱歉,我把问题搞砸了
我想重现一些我在使用没有该库的库时遇到的一些奇怪现象,但我失败了。
所以第二次尝试:
我正在使用 Autodesk Maya 的 python API。它只是围绕现有 C++ API 的 python 包装。
所以这段代码:
import maya.OpenMaya as om
Q = om.MQuaternion(1,2,3,4).conjugateIt()
P = om.MQuaternion(6,6,6,6)
print(Q[0],Q[1],Q[2],Q[3])
print(type(Q))
print(type(P))
产生这个输出:
(6.0, 6.0, 6.0, 6.0)
<class 'maya.OpenMaya.MQuaternion'>
<class 'maya.OpenMaya.MQuaternion'>
所以两者P,Q
都是类型MQuaternion
,但Q
不保存它应该保存的数据。在这里您可以找到课程的文档MQuaternion
。conjugateIt
是结合到位并通过引用返回。
那么现在出了什么问题呢?
这是一个错误的老问题:D
在 C++ 中,我习惯于做这样的事情。
complex<float> c = complex<float>(1,2).conjInPlace()
conjInPlace() 是就地共轭
但是,如果我在 python 中做类似的事情,我会遇到麻烦
class testClass:
def __init__(self,_a,_b):
self.a = _a
self.b = _b
def alterMe(self):
self.b = 123
A = testClass(1,2)
A.alterMe()
print(A.a,A.b)
B = testClass(0,0)
B = testClass(3,4).alterMe()
print(B)
给我输出:
1 123
None
我猜是因为返回的对象testClass(3,4)
没有立即被某些东西引用,所以它被删除了。
那么为什么会这样呢?如何提防这类事情?