前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 传值还是传引用

Python 传值还是传引用

作者头像
birdskyws
发布2018-09-12 15:01:23
2.2K0
发布2018-09-12 15:01:23
举报
文章被收录于专栏:一英里广度一英寸深度的学习

在实现二叉树的代码时,使用递归调用,当给空叶子节点赋值的时候,发现只修改了局部变量。 因此研究了一下Python中传值和传引用的问题。

实验

实验一
代码语言:javascript
复制
a = None
print(id(a))
b = None
print(id(b))

4321685368 4321685368

结论: 结果指向同一块区域

实验二
代码语言:javascript
复制
def test(x):
    x = x+2;
a = 2
print(a)

2

结论: 没有改变原变量

实验三
代码语言:javascript
复制
def test(x):
    x = [1,2,3]

a = [1,2]
print(a)
print(id(a))

test(a)
print(a)
print(id(a))

[1, 2] 4370314760 [1, 2] 4370314760

结论: 没有改变原变量地址

实验四

代码语言:javascript
复制
def arrayadd(x):
    x.append(1)
a = [1,2]
print(a)
print(id(a))
arrayadd(a)
print(a)
print(id(a))

[1, 2] 4370399624 [1, 2, 1] 4370399624

结论:变量地址不变,值改变。

如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

实验一、二说明不可变对象的使用方法。

实验四,说明了可变对象的使用方法。

实验三,使用赋值操作要注意没有改变原对象,相当于传值。

二叉树问题

代码语言:javascript
复制
    def _insert_(self,node,key,value):
        print(id(node))
        print(id(self.root))
        if(node==None):
            node = Node(key,value)
            self.count = self.count+1
            print(id(node))
            print(id(self.root))
        elif(node.value>key):
            self._insert(node.lnode,key,value)
        elif(node.value<key):
            self._insert(node.rnode,key,value)
        else:
            node.value = valu

如果 node =None,相当于node指向一个不可变对象,在调用insert函数时,仅传值。

Python构建二叉树参考代码:node必须不为None,如果为None则创建节点。
代码语言:javascript
复制
    def _insert(self,node,key,value):
        if(node.key == key):
            node.value = value
        elif(node.key > key):
            if(node.lnode == None):
                node.lnode = Node(key,value)
                self.count = self.count+1
                return
            else:
                self._insert(node.lnode,key,value)
        elif(node.key < key):
            if(node.rnode == None):
                node.rnode = Node(key,value)
                self.count = self.count + 1
                return
            else:
                self._insert(node.rnode,key,value)

总结:作者本着折腾自己的想法,将用java和c写的数据结构,都用Python实现一遍,帮助记忆。这个过程中,还是发现对python语法很多不了解的地方。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验
    • 实验一
      • 实验二
        • 实验三
        • 实验四
        • 二叉树问题
          • Python构建二叉树参考代码:node必须不为None,如果为None则创建节点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档