python复制函数_Python之深浅拷贝&函数

一、深浅拷贝

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

1、浅拷贝

示例:

>>> importcopy>>> a = 'hello word'

>>> b = {1:'gome',2:'ahaii',3:[1,2,3,4]}>>> a1 =copy.copy(a)>>> b1 =copy.copy(b)>>> printid(a)140458175739296

>>> printid(a1)140458175739296

>>> printid(b)140458175695680

>>> printid(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:

>>> importcopy>>> a = 'hello word'

>>> printid(a)140069292463520

>>> a1 =copy.deepcopy(a)>>> printid(a1)140069292463520

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

示例2:

>>> importcopy>>> b = {1:'hello word',2:'ahaii',3:[1,2,3,4]}>>> b1 =copy.deepcopy(b)>>> printid(b)140442326100800

>>> printid(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):#一个可变参数,放在元组中

printarg

func (1,2,3,4,5,6)#结果为一个元组:(1,2,3,4,5,6)

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

示例2:

def func (**kwargs):#一个可变参数,放在字典中

printkwargs

func(a=123,b=234,c=345)#结果为一个字典:{'a': 123, 'c': 345, 'b': 234}

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

示例3:

def func (*arg,**kwargs):printarg,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):#两个可变参数,字符串放在元组中,键值对放在字典中

printarg,kwargs

func('aha','dfjid','fdjfdkf',a=123,b=234)#结果为:('aha', 'dfjid', 'fdjfdkf') {'a': 123, 'b': 234}

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

示例5:

def func (*arg,**kwargs):printarg,kwargs

l= [11,22,33]

d= {'1':'ewe','2':'ddf'}

func(*l,**d)#结果为:(11, 22, 33) {'1': 'ewe', '2': 'ddf'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值