Python中的C风格指针,是否正确?

Python中的C风格指针,是否正确?,python,c,pointers,Python,C,Pointers,我正在尝试将一个C应用程序移植到Python,这里有很多指针。这些是否平等: obj->position = (float*) malloc(obj->totalItems * obj->xyz * sizeof (float)); for (i = 0; i < components; i++) { obj->comps[i].position = obj->position + obj->pOffset; // Pointer arithme

我正在尝试将一个C应用程序移植到Python,这里有很多指针。这些是否平等:

obj->position = (float*) malloc(obj->totalItems * obj->xyz * sizeof (float));
for (i = 0; i < components; i++) {
    obj->comps[i].position = obj->position + obj->pOffset; // Pointer arithmetic
obj->pOffset += obj->comps[i].items * obj->xyz;
}
我知道Python对象是通过引用传递的,所以我想知道:

self.comps[N].position = [1,2,3,4]
将更改以下内容的某些部分:

self.position[]

也许是这样的:

self.position = [0.0 for _ in self.total_items * self.xyz]
for i in range(self.components):
    self.comps[i].position = self.p_offset
    self.p_offset += self.comps[i].items
在Python中,可以更改类实例变量内的值。这称为实例的“变异”。如果类不允许这样做,那么它是一个“不可变”类;如果它允许这样做,那么它是一个“可变”类。字符串和整数是不可变的,但列表是可变的

在Python中,我想不出任何方法来获取对列表中间部分的引用。列表是可变的:事物可以被插入、删除等。那么引用应该做什么呢

因此,与其进行指针数学运算并存储对列表中某个点的引用,不如只存储偏移量,然后在需要引用列表中该点时使用偏移量对列表进行索引

关于你的具体问题:

self.comps[N].position = [1,2,3,4]
这将在
self.comps[N]
对象中重新绑定名称
position
,现在指向一个新创建的列表实例,其值为
[1,2,3,4]
,并且不会影响
self.position
。但是,如果您只是将
self.comps[i].position
设置为索引值,则可以使用以下代码:

i = self.comps[N].position
lst = [1, 2, 3, 4]
self.position[i:i+len(lst)] = lst
这将在
self.position
列表中使用一个“切片”来替换值

请注意,如果您使用SciPy甚至只是NumPy,那么可以定义一个非动态的
NumPy.array
;您可以使用“视图”获取对列表一部分的引用。您可能希望对此进行研究,尤其是在处理非常大的数组或矩阵时


自我补偿[N].职位=[1,2,3,4]

将self.comps[N]位置设置为新列表。如果对旧列表的其他引用是self.comps[N].position,则不会更改这些引用

范例

x=[1,2,3]
y=x
print y #[1, 2, 3]
x[1]=4
print y #[1, 4, 3]
x=[4,5,6]
print y #[1, 4, 3]

谷歌搜索
python指针
-第二个结果:@seanschere:你链接到了一个很好的解释。这是另一个(这次有图片)
x=[1,2,3]
y=x
print y #[1, 2, 3]
x[1]=4
print y #[1, 4, 3]
x=[4,5,6]
print y #[1, 4, 3]