tom*_*tom 2 python garbage-collection
好吧,我只是学习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))
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
(6.0, 6.0, 6.0, 6.0)
<class 'maya.OpenMaya.MQuaternion'>
<class 'maya.OpenMaya.MQuaternion'>
Run Code Online (Sandbox Code Playgroud)
所以两者P,Q都是类型,MQuaternion但Q不保留它应该保存的数据.在这里你可以找到文档的MQuaternion类.conjugateIt是共轭的,并通过引用返回.
那么现在出了什么问题?
在C++中,我习惯做这样的事情.
complex<float> c = complex<float>(1,2).conjInPlace()
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
给我输出:
1 123
None
Run Code Online (Sandbox Code Playgroud)
我想这是因为返回的对象testClass(3,4)没有被某些东西立即引用,所以它被删除了.
那为什么会这样呢?如何注意这种事情?
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |