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 = {'':'ewe','':'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 = {'':'ewe','':'ddf'}
func(*l,**d)#结果为:(11, 22, 33) {'1': 'ewe', '2': 'ddf'}
Python之深浅拷贝&函数的更多相关文章
- Python的深浅拷贝
Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...
- Python原理 -- 深浅拷贝
python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...
- python基础(三元运算+深浅拷贝+函数参数)
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...
- python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域
上节课总结 1 运算符 in 字符串 判断 : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...
- Python学习基础(二)——集合 深浅拷贝 函数
集合 # 集合 ''' 集合是无序不重复的 ''' # 创建列表 l = list((1, 1, 1)) l1 = [1, 1, 1] print(l) print(l1) print("* ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...
- python高级-深浅拷贝(16)
一.浅拷贝 浅拷贝是对一个对象的顶层拷贝,通俗地讲就是:拷贝了引用,并没有拷贝内容. a = [1,2,3] print(id(a)) b=a print(b) print(id(b)) a.appe ...
- JS中深浅拷贝 函数封装代码
一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...
随机推荐
- js 增加 onclick 事件
obj.onclick = function(){check(this)} function check(obj){ alert(obj)l }
- 循序渐进看Java web日志跟踪(3)-Log4J的使用和配置
之前说过关于java日志跟踪的几大主要用的框架,也说到了,其实在其中,Log4J充当着一个相当重要的角色.目前,大部分框架也都是采用的是Log4J,虽然说它已经停止了更新,作者也重新起了LogBack ...
- mysql vachar
--本文在CSDN文章的基础加以补充 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,va ...
- CSS继承性+层叠性+盒子+浮动
CSS继承性+层叠性+盒子+浮动 CSS继承性 <style> div{ color: pink; font-siz ...
- POJ 3139 Balancing the Scale
枚举. 看了这个方法:$http://www.cppblog.com/shiming413/archive/2008/12/21/29671.html$ 将数字归类的地方不能用$vector$,会超时 ...
- R语言数据结构
5. 数据结构 5.1 数据结构简介 (1)向量 一个向量的所有元素必须有相同的类型(模式) (2)列表 列表可以非同质的 列表可按位置索引:lst[[2]] 抽取子列表:lst[c(2,5)] 列表 ...
- openstack私有云布署实践【11.1 计算nova - compute节点配置(科兴环境)】
这里我只使用kxcompute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已 计算节点 # yum install openstack-nova-compute sysf ...
- 更改系统相机UIImagePickerController导航栏的cancle为自定义按钮
有时候需要对系统相册里面的取消按钮进行自定义,并获取点击事件做一些操作,那么你可以这样做. 第一:实现navigationController代理 - (void)navigationControll ...
- [SQL基础教程] 2-1 SELECT语句基础
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
- 所需的防伪表单字段“__RequestVerificationToken”不存在
错误提示为:所需的防伪表单字段"__RequestVerificationToken"不存在. <%:Html.AntiForgeryToken()%> 在mvc4中的 ...