本文是Python和C引文的实例分析,边肖认为挺实用的,所以想分享给大家学习。希望大家看完这篇文章能有所收获。我不多说,让我们和边肖一起看看。
在Python中编写构建二叉树的代码时,我们遇到了这个问题。原因是Python的“引用”和C的“引用”混淆了。两种语言都有“指称”名词。虽然它们在大多数情况下是相似的,但它们仍然不同。注意,这只是我个人的理解。在找到更好的理解之前,让我们这样理解吧!
例如,这是我根据优先顺序创建二叉树的两段代码:
#正确。
pos=0
defcreate(seq):
globalpos
ch=seq[pos]
pos=1
ifch=='#':
返回无
else:
temp=TreeNode(ch)
temp.left=create(seq)
temp.right=创建(seq)
返回温度
seq='abd###ce### '
Root=create(seq)和这个:
#错误
defcreate(root):
globalpos
if(seq[pos]=='#'):
根=无
pos=1
返回
root=TreeNode(seq[pos])
pos=1
root.left=无
root.right=无
创建(root.left)
Create(root.right)似乎只是有没有返回值的区别。其实第二个代码是错的。事实上,从第二个代码的角度来看,它可以用C编写如下:
void create(treet){ 0
charch=str[pos];
if(ch==' # '){ 0
t=空;
返回;
}
t=newnode
t-val=ch;
create(t-left);
create(t-right);
}这就是Python和C引用的区别。
我是这样理解的:Python中内存的使用更像是不可变的。对于引用所指向的对象,如果我想修改值,我将首先找到一个新的内存块,分配一个值,然后将引用指向这个新的内存块,从而修改引用所指向的位置,但是在C语言中,它是直接在引用所指向的内存块上更改的,例如:
Python:
a=1
打印(id(a))
a=a 1
打印(id(a))
#输出。
140708803374848
c中的10708803374880:
int t=1;
inta=t;
printf('%d%d\n ',a,a);
a=1;
printf('%d%d\n ',a,a);
#输出。
72087121
7087122所以,就像上面的第二个代码一样,我传入了创建的根的引用,但是当树的结构改变时,它实际上改变了存储位置,这样在原始函数之外创建的根引用实际上指向了原始的空内存块(我突然觉得好傻。就像被偷了然后等待。),但是C的引用很固执,只认那块内存,所以可以直接更改使用。
关于Python中引用和对象的关系,还涉及到内存等一些知识,比如:
a=1
b=1
打印(id(a))
打印(id(b))
#输出。
140708803374848
10708803374848这是因为在Python中,为了节省内存,会缓存一些短字符串和数字,这样可以节省构建和销毁这类对象的成本。
其他的是关于可变数据对象和不可变对象,我之前已经记录过了。有些语言看似简单,但实际上应该很好理解。
以上是Python和C参考的实例分析。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48262.html