我正在用python2.7为我的类编写deepcopy函数。我遇到了一个奇怪的问题 我的代码如下
import copy
from ctypes import *
class Graph (Structure):
_fields_ = [("numVertices", c_ulong),
("numEdges", c_ulong)]
def __init__(self):
self.numVertices = c_ulong(0)
self.numEdges = c_ulong(0)
def __deepcopy__(self,memo={}):
newInstance = Graph()
newInstance.numVertices = c_ulong(self.numVertices.value)
newInstance.numEdges = c_ulong(self.numEdges.value)
return newInstance
graph = Graph()
anotherGraph = copy.deepcopy(graph)
我得到以下错误:
^{pr2}$如果您尝试:
type(graph.numVertices)
结果是漫长的
我把这些数字声明为c峎ulong()。为什么会变长?在
结构中的字段类型仍保持不变,但ctypes在读取值时有一些“有用”的转换:
输出:
^{pr2}$因此,您可以按以下方式编写代码,它将正常工作:
您可以通过从类派生来抑制转换,但这通常是不必要的。一个用例是使用ctypes调用返回已分配字符串的函数。您需要禁止c_char_p到Python字节字符串的转换,以便以后可以释放c_char_p
输出:
相关问题 更多 >
编程相关推荐