zoukankan      html  css  js  c++  java
  • Python之深浅拷贝&函数

    一、深浅拷贝

    深浅拷贝是指copy模块下的copy()和deepcopy()方法。

    1、浅拷贝

    示例:

    >>> import copy
    >>> a = 'hello word'
    >>> b = {1:'gome',2:'ahaii',3:[1,2,3,4]}
    >>> a1 = copy.copy(a)
    >>> b1 = copy.copy(b)
    >>> print id(a)
    140458175739296
    >>> print id(a1)
    140458175739296
    >>> print id(b)
    140458175695680
    >>> print id(b1)
    140458175749208
    >>> print id(b[3])
    140458175609096
    >>> print id(b1[3])
    140458175609096
    >>> print id(b[3][0])
    41361752
    >>> print id(b1[3][0])
    41361752

    浅拷贝时,变量的内存地址不会发生改变。

    2、深拷贝

    示例1:

    >>> import copy
    >>> a = 'hello word'
    >>> print id(a)
    140069292463520
    >>> a1 = copy.deepcopy(a)
    >>> print id(a1)
    140069292463520

    对于字符串或者整型,深拷贝同浅拷贝效果一样,其内存地址不会发生改变。

    示例2:

    >>> import copy
    >>> b = {1:'hello word',2:'ahaii',3:[1,2,3,4]}
    >>> b1 = copy.deepcopy(b)
    >>> print id(b)
    140442326100800
    >>> print id(b1)
    140442326156184
    >>> print id(b[3])
    140442326014216
    >>> print id(b1[3])
    140442326097288
    >>> print id(b[3][0])
    32555352
    >>> print id(b1[3][0])
    32555352

    深拷贝时,除了最内层数据(字符串或数字)外,其他数据都会重新创建一份,内存地址发生改变。

    二、函数之动态参数

    示例1:

    def func (*arg):#一个可变参数,放在元组中
        print arg
    func (1,2,3,4,5,6)#结果为一个元组:(1,2,3,4,5,6)

    *arg 表示该函数可以接受个数可变的参数,将获取的所有参数存放在一个元组中。

    示例2:

    def func (**kwargs):#一个可变参数,放在字典中
        print kwargs
    func(a=123,b=234,c=345)#结果为一个字典:{'a': 123, 'c': 345, 'b': 234}

    **kwargs 表示该函数可以接受个数可变的参数,将获取的所有参数以键值对形式存放在字典中。

     示例3:

    def func (*arg,**kwargs):
        print arg,kwargs
    l = [11,22,33]
    d = {'1':'ewe','2':'ddf'}
    func(l,d)#结果为一个元组和一个空字典:([11, 22, 33], {'1': 'ewe', '2': 'ddf'}) {}

    该函数有两个形参,当给函数传参时(参数为一个元组和一个字典),函数会把这两个参数传给第一个形参*arg,生成一个元组。**kwargs没有接收参数,为一个空字典。

    示例4:

    def func(*arg,**kwargs):#两个可变参数,字符串放在元组中,键值对放在字典中
        print arg,kwargs
    func('aha','dfjid','fdjfdkf',a=123,b=234)#结果为:('aha', 'dfjid', 'fdjfdkf') {'a': 123, 'b': 234}

    既有字符串,也有键值对时,字符串传递给*arg,放在元组中,键值对传递给**kwargs,放在字典中。

    示例5:

    def func (*arg,**kwargs):
        print arg,kwargs
    l = [11,22,33]
    d = {'1':'ewe','2':'ddf'}
    func(*l,**d)#结果为:(11, 22, 33) {'1': 'ewe', '2': 'ddf'}
  • 相关阅读:
    2010年8月18日周三_Migrating from 1.3 to 2.0_5
    2010年8月12日_周四_UserControlTask control
    2010年8月18日周三_insideTheAPI_overView_6.1
    一个Flex事件的简单的例子
    2010年8月13日_周五_PrintTask control
    如何发布一个GeometryService服务
    lua分割字符串
    lua字符串合并
    lua 类型转换
    linux 下 svn 冲突解决办法
  • 原文地址:https://www.cnblogs.com/ahaii/p/5140165.html
Copyright © 2011-2022 走看看