python-026-可变量和不可变量、复制二叉树

复制列表的操作:
比如给一个列表:
list = [1,2,3,4,5,6]
复制:
copy_list = list[:]

注意这里不是直接:copy_list = list
这样只是给列表起了个别名。

python的内置类分为可变量和不可变量,比如int\float\str\tuple\frozenset\bool,这几个是不可变量,比如说:

a = 10
a = 1

这样只是新创建了一个值为1的int实例,然后将a指向1,10被抛弃了。就10这个数来说,它本身是一个整型对象,一个数怎么改变,10只能是10,是不能变的。
这在给函数传递参数时,函数内部的形参的变化,并不会改变不可变量本身的值。但是如果传入的是一个可变量——list、dict、set,情况就不同了。如果再函数体内改变了可变量的状态,这个传入的可变参数是会被改变的,也就是外部的实参会被改变。但是如果再函数内部,给这个可变量重新赋值,并不会改变实参。

这段只要不是给arr重新赋值,arr变则brr变:

arr=[1,2,3,4,5]
brr=arr
arr.append(6)
print(arr)
print(brr)

可变量和不可变量,在使用时一定要分清楚,不然会出现意想不到的错误。


复制二叉树:
这与复制链表的操作差不多一个意思,不能重新起个名字,要新创建二叉树节点对象,在将他们构成新的二叉树:
同样利用了三种遍历函数,稍作修改,即可实现,

#复制二叉树,先序遍历、中序遍历、后序遍历都可以
def dup_bitree(root):
    """
    递归调用,先序
    """
    if None==root:
        return None
    #复制根节点
    dup = BiTNode(None)
    #下面三行可以互换位置
    dup.left_child=dup_bitree(root.left_child)
    dup.right_child=dup_bitree(root.right_child)
    dup.data = root.data
    #返回复制完的二叉树
    return dup

好的一会我还要爬淘宝,我就先这样了。

你可能感兴趣的:(python-026-可变量和不可变量、复制二叉树)