python中的记录指针_python中的指针

我在用python实现二叉树的过程中发现了python中指针使用的特点,记下来防止遗忘。

利用层序创建二叉树的代码如下:

class Node(object):

def __init__(self,elem):

self.data = elem

self.l_child = None

self.r_child = None

def create_tree(nodelist):

Nodes=[]

if nodelist[0]!=None:

head=Node(nodelist[0])

else:

return None

Nodes.append(head)

j=1

for node in Nodes:

if nodelist[j]!=None:

node.l_child=Node(nodelist[j])

Nodes.append(node.l_child)

print(node.data,node.l_child.data)

j=j+1

if j==len(nodelist):

return head

if nodelist[j]!=None:

node.r_child=Node(nodelist[j])

Nodes.append(node.r_child)

print(node.data,node.r_child.data)

j=j+1

if j==len(nodelist):

return head

其中在将已经创建好的节点放入Nodes这个列表里面时,我使用语句

Nodes.append(node.l_child)

这样做是可以得到一个完整的树的,但如果使用

Nodes.append(Node(nodelist[j]))

那么得到的该节点的l_child及其分支将会全部消失。原因是变量名node.l_child代表了一个原节点的一个指针,指向一个新开辟的节点,而使用Node(nodelist[j])时相当于重新开辟了一个新的树节点,这个节点和原来的树中的节点没有关系。

总结,在python中使用链表,树等需要用一个指针来指向一个与结构体本身同类型(节点类型)的变量的时候,将该变量的变量名赋值给指针,而不是将该变量的内容赋值给指针。

转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值