Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6275661
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Python/Ruby

2014-06-13 01:35:42

    中午抽空看了下字典部分,感觉不是太难,倒是深浅复制的部分感觉容易混淆,这里来简单记录下吧!字典是Python另外一种内建的数据结构,与列表的不同之处在于不再使用数值作为索引标号,而是使用更为通用的“键”来作为数值元素的索引。就像我们查字典,比如我们想知道一个字的意思,那么我们首先在字典前面的汉语拼音表中找到该字,然后找到相应的页数,了解其字义。定义一个字典很简单,直接看代码吧:

-1. 这里直接使用{}来定义一个字典,字典中的每一项都由键值对来体现,比如这里的字典phonebook的项【Tom:88881234】,由于字符串类型我们都加了""/'';
-2. 读取字典中的值,可以使用键作为索引,如phonebook['Bob'];也可以使用字典的get()方法,提供键值作为参数;
   字典还有一些其他的操作,但是由于目前我们还用不大到,基本上以序列较多,因此这里不再详细讨论了。接下来来说说Python的深浅复制。
   深浅复制指的是在使用Python提供的copy方法时,复制获得的副本存在差异。Python中提供了不同的复制方法,比如分片赋值等,我们这里一起对比说明:


-1. 代码首先定义了一个列表a,然后使用直接复制、分片复制、copy复制与deepcopy复制的方式得到列表b、c、d、e;
-2. 首先使用a.append()对a进行修改,然后依次看其他列表的变化情况:

   可以看到,b和a发生了相同的变化,而c、d、e都没有改变,其实这里的区别主要如下:
**1. b = a  #a和b作为同一个实体列表对象的引用存在
**2. c = a[:]  #c作为列表a的一个浅复制副本存在;
**3. d = copy.copy(a)  #d作为列表a的一个浅复制副本存在;
**4. e = copy.deepcopy(a)  #e作为列表a的一个深复制副本存在;
   我们可以查看id(),会发现a和b其实就是一个对象:

   当我们修改列表a中的子对象[4, 5, 6]时,深浅复制的区别就展现出来了,同样的改变会影响浅复制c和d,而不会影响深复制e。原因就在于:浅复制只是复制原始对象,不包括原始对象包含的子对象;而深复制则复制原始对象和其包含的子对象,从而生成了完全独立的副本。不晓得这么说大家是否明白,子序列作为原始序列的子对象,浅复制时没有复制到副本里,而是二者共用该子对象;深复制时则是完全独立的副本了。
阅读(749) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~