当我在阅读SWIG文档时,我读了以下几行。。在E> C/C++全局变量完全由SWIG支持。但是,由于Python赋值的工作方式,底层机制与您可能预期的有所不同。在Python中键入以下内容时
a=3.4
“a”成为包含值3.4的对象的名称。如果您稍后键入
b=a
那么“a”和“b”都是包含值3.4的对象的名称。因此,只有一个对象包含3.4,“a”和“b”都是引用它的名称。这与C语言大不相同,在C语言中,变量名表示存储值的内存位置(赋值将数据复制到该位置)。因此,无法直接将C中的变量赋值映射到Python中的变量赋值。
为了提供对C全局变量的访问,SWIG创建了一个名为“cvar”的特殊对象,该对象被添加到SWIG生成的每个模块中。然后将全局变量作为该对象的属性进行访问。
我的问题是,按上述方式实施有何必要。即使我们以上述方式实现了对象属性也被实现为对象。在
请参阅下面的python代码片段a = 10
b = a
a is b
True
class sample:
pass
obj = sample()
obj.a = 10
obj.b = obj.a
obj.a is obj.b
True
在上述两种情况下,对象分配的方式相同