新手学python疑惑(一)—— 列表内容的复制

疑惑在于 《python 程序设计(第2版) 董付国 清华大学出版社》第46页

原文是:

【列表推导式】
>>>freshfruit=[‘banana‘, ‘loganberry‘, ‘passion fruit‘]
>>>aList=[w.strip() for w in freshfruit]
等价于下面的代码:
>>>freshfruit=[‘banana‘, ‘loganberry‘, ‘passion fruit‘]
>>>for i, v in enumerate(freshfruit):
    freshfruit[i]=v.strip()
同时,也等价于
>>>freshfruit=[‘banana‘, ‘loganberry‘, ‘passion fruit‘]
>>>freshfruit=list(map(str.strip, freshfruit))

关键疑惑点在于最后一行代码中的 map(str.strip, freshfruit)

根据上一条随笔, map(A, B)函数是 把 B 代入 A 中 返回结果,按这个来看,那么原文应该是 把列表 freshfruit 中的元素代入 str.strip 中,可是 str.strip 是什么呢?!

先来看看这些代码输出的结果是什么:

[‘banana‘, ‘loganberry‘, ‘passion fruit‘]

结果竟然与 原来的列表(freshfruit) 内容一样

判断 id(freshfruit) == id(aList)  答案是 False

故可知道这些代码作用是 列表内容的复制,而不是内存地址的复制,即不是 ‘is’ 的关系,而是 ‘==’ 的关系。

到这里就能明白 列表的复制 不能是 A = B 这么简单,因为这样就是内存地址的相等,改变其中一个列表就会同样对另一个列表进行改变。

比如说:

>>> oldlist = [‘a‘, ‘b‘, ‘c‘]
>>> newlist = oldlist
>>> oldlist
[‘a‘, ‘b‘, ‘c‘]
>>> newlist
[‘a‘, ‘b‘, ‘c‘]
>>> newlist.append(‘d‘)
>>> newlist
[‘a‘, ‘b‘, ‘c‘, ‘d‘]
>>> oldlist
[‘a‘, ‘b‘, ‘c‘, ‘d‘]

改变了 newlist 也会对 oldlist 进行改变。

>>> id(oldlist)
1625304
>>> id(newlist)
1625304
>>> newlist is newlist
True

内存地址一样。

那么回到原来的疑惑, str.strip 到底是什么?

到这里我才忽然明白了, 根据 strip()函数 的意思, Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。——by 菜鸟教程

而书本上的那段代码其实是这样的:

>>>freshfruit=[‘  banana ‘, ‘  loganberry  ‘, ‘passion fruit  ‘]

在字符前后是加了几个空格的,而不是像我最开始敲的代码一样没有空格。

★这就解释了其实书本上代码的意思是 去除空格 ,而不是我以为的 列表内容的复制★

疑惑解决!

原文地址:https://www.cnblogs.com/Duck-Quick/p/9304194.html

时间: 2024-10-15 23:02:53

新手学python疑惑(一)—— 列表内容的复制的相关文章

【新手学Python】一、基础篇

由于以前处理数据用Matlab和C,最近要处理大量文本文件,用C写实在是太繁琐,鉴于Python的强大文本处理能力,以及其在Deep Learning上有着很大优势,本人打算从即日起学习Python,谨以此系列博客记录学习点滴.文中如有错误,还望大牛们指出! Section 1: 本文是第一篇,当然也是基础,有了编程基础的我们都知道,学习一门语言什么最重要?当然先搞清楚数据类型和数据结构,有了这些,你才能去谈面向对象,才能去设计程序. Python的数据类型比较简单:1.整数;2.长整数;3.浮

新手学Python有什么好方法?如何学好Python?

对于新手来说,如何快速入门掌握Python编程呢?这个问题问的非常不错.学习编程来说,虽然语言具有简单化的优势,但是同样学习起来非常的麻烦,想要快速学习好一门语言,唯有站在别人的肩膀上才可以更快一些,如果学习不值得借鉴别人的经验,那么你同样会掉坑中,所以掌握高效的学习方法很重要,这些你知道吗? 大家都知道,Python是一种编程语言,可以用来做很多事情,基本可以说是全能语言了,可以用来做网站.脚本.数据分析.人工智能以及游戏开发等等,而对于很多人可能并不懂这些,只是觉得别人在学习,或者听别人说怎

新手学Python可行吗?需要什么基础吗?

Python是一门非常不错的编程语言,大家都知道该语言通俗易懂.容易上手.功能强大,可以从事多个工作领域,可以选择的岗位有很多,那么新手学习Python可以吗?需要什么基础吗?为大家介绍一下吧. 新手学习Python可以吗?当然了,其实Python可以说是非常适合新手学习的一门编程语言,难道真的不需要任何基础吗?简单的来说,如果学习者具备一定计算机基础的情况下,学习起来会更快一些的,当然了即便是没有基础,如果自己愿意付出精力和时间,同样可以学习好Python的.所以说新手学习Python是可行的

新手学python(3):yield与序列化

1 Yield生成器 Yield是我在其他语言中没有见过的一个属性,算是python的一大特色,用好之后可以使代码更简洁.考虑一个简单的例子,文件的遍历.要遍历一个目录下的所有文件需要递归的操作.如果我们只是单纯的打印文件名,我们可以在递归的过程中完成,每当发现一个非目录就可以打印文件名.代码如下: class TraverseDirectory(object): @staticmethod def traverse(dir): if os.path.isdir(dir): files=os.l

新手学python遇到问题。

对这段话理解如下:结果报错:是否有大牛解释一下? 原文地址:https://blog.51cto.com/12197109/2401951

新手小白学Python有前途吗?

最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台 78486745 . 很多同学在选择学习python之初,可能都有这样的疑惑:学Python有前途吗?对于新兴的事物,人们慢慢接受是需要一个过程的,那究竟学python有没有前途呢?今天小编就来给大家指导一下迷津. 首先从国家的层面上来说,国务院发布<新一代人工智能发展规划>,人工智能正式纳入国家发展战略,在教育上,教育部已将人工智能.物联网.大数据处理划入高中新课标;浙江省.北京市.山东省等将 Python

Python自学之旅 #新手#MacBook #《“笨办法”学Python》#第六章:常用的简易Python命令、符号、代码、格式化字符串

第六章:常用的简易Python命令.符号.代码.字符串 <“笨办法”学Python>这本书中,确实用了较多篇幅来介绍Python的一些常用简单的命令.符号.代码和字符串等,对于像我这样的自学新手,真的是非常棒,因为它们可以帮我建立接着学下去的信心和兴趣.但我在这个系列的博客当中,不打算写的这么精细,首先因为这不符合我写博的初衷和习惯,其次因为我不打算靠这写书来挣钱,最后因为我确实没有那个实力去挖掘简单东西中更深奥复杂的应用.所以,我写的这个博客,只适合像我这样的自学新手,如果想要成为大神,还是

菜鸟学python(11)list列表基本操作

想写点东西把自己学习python的过程记录下来,于是就有了菜鸟学python... list列表是在编写程序中经常用到,是用来处理一组有序项目的数据结构. 比如说range(1,5)其实就是个整数列表 所以 for x in range(1,5) 可以写成 for x in [1,2,3,4] 下面是一些列表的常见基本操作 首先创建一个空列表list list = [] 用append向这个列表里面添加一个值 list.append(1) #向list里面添加1 可以通过extend向list中

运维新手们,别再问需不需要学PYTHON了!!!

经常有人在群里问,运维人员需不需要学开发?需不需要学PYTHON?PYTHON和SHELL有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲,求求新手们,以后别他妈瞎问了.现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试.优化开发人开发的程序,开发人员有的时候很少关注性能的问题,这些问题就得运维人员来做,一个业务上线了,导致CPU使用过高,内存占用过大,如果你不会开发,你可能只能查到进程级别,也就是哪个进程占用