一、深浅拷贝

深浅拷贝是指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之深浅拷贝&函数的更多相关文章

  1. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

  2. Python原理 -- 深浅拷贝

    python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...

  3. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...

  4. python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域

    上节课总结 1 运算符 in 字符串 判断  : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...

  5. Python学习基础(二)——集合 深浅拷贝 函数

    集合 # 集合 ''' 集合是无序不重复的 ''' # 创建列表 l = list((1, 1, 1)) l1 = [1, 1, 1] print(l) print(l1) print("* ...

  6. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  7. 图解Python中深浅拷贝

    在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...

  8. python高级-深浅拷贝(16)

    一.浅拷贝 浅拷贝是对一个对象的顶层拷贝,通俗地讲就是:拷贝了引用,并没有拷贝内容. a = [1,2,3] print(id(a)) b=a print(b) print(id(b)) a.appe ...

  9. JS中深浅拷贝 函数封装代码

    一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...

随机推荐

  1. Reprint: Serialization

    Having just recently ran into some major serialization issues I’m going to list some of the errors a ...

  2. centos设置svn开机自启动

    安装好 svn 服务后,默认是没有随系统启动自动启动的, CentOS 7 的 /etc/rc.d/rc.local 是没有执行权限的, 系统建议创建 systemd service 启动服务 于是查 ...

  3. 【安装】beautifulsoup4—美丽汤的安装

    beautifulsoup俗称美丽汤,是用来爬虫用的,大家可以到这个网址去下载.注意,要根据对应的python版本 来下载. 下载传送: https://pypi.python.org/pypi/be ...

  4. bootstrap IE8 相互兼容

    针对 IE8 仍然需要额外引入 Respond.js 文件(由于仍然利用了浏览器对媒体查询(media query)的支持,因此还需要做处理) <html lang="zh-cn&qu ...

  5. mybatis分页控件

    https://my.oschina.net/miemiedev/blog/135516

  6. Python tools used for file name devision

    今天因为工作的缘故,需要用Python写一个能够完全分解文件名的小程序. import os #path = os.path.abspath('.') def split_fully(name): p ...

  7. 那些年,我们被耍过的bug——haslayout

    你被IE的bug耍过几次了? IE,这个令所有网站设计人员讨厌,但又不得不为它工作的浏览器.不论是6.7还是8,它们都有一个共同的渲染标准haslayout,所以haslayout 是一个非常有必要彻 ...

  8. 在网页边角添加GitHub链接图标

    在网页边角添加GitHub链接图标 在页面添加HTML一下代码: <a href="https://github.com/you"> <img style=&qu ...

  9. 使用高通SDK开发AR应用

    具体AR是什么效果我这里就不说了,直接上过程: 1.去官网注册一个帐号https://developer.vuforia.com 2.下载SDK for Unity,并导入Unity 3.点击Deve ...

  10. hdu1536Nim

    sg函数打表的基础应用,第一道ac的sg函数打表题纪念下,直接上代码: hdu1536题目连接 #include<iostream> #include<cstdio> #inc ...