由于底层的c实现,python中的指针问题也成为了一个大问题,得好好研究
1) 共享引用
由于python中,万物皆对象,所以赋值总是代表着引用的copy,很好的一个例子
python 代码
- >>> X = [1, 2, 3]
- >>> L = ['a', X, 'b']
- >>> D = {'x':X, 'y':2}
- >>> L
- ['a', [1, 2, 3], 'b']
- >>> D
- {'y': 2, 'x': [1, 2, 3]}
- >>> X[1] = 'aha'
- >>> X
- [1, 'aha', 3]
- >>> L
- ['a', [1, 'aha', 3], 'b']
- >>> D
- {'y': 2, 'x': [1, 'aha', 3]}
有程序设计经验的人很容易明白上面的代码,当我们在L,D中使用X时,实际上是把[1, 2, 3]这个列表的地址放到了L,D中X的位置上,当[1, 2, 3]中元素改变时,地址并没有变,所以L,D也跟着变。
python 代码
- >>> s = 'abc'
- >>> l = [1, 2, s]
- >>> l
- [1, 2, 'abc']
- >>> s = 'def'
- >>> l
- [1, 2, 'abc']
这段代码有人就该迷糊了,s不是指向的是一个字符串地址吗,l中相应的位置也是这个地址啊,s改变了,为什么l不变?呵呵,原因就是字符串是不可遍的,当我们把'def'赋给s时,s所指向的地址就变了,而l中s的位置还是存的'abc'的地址,这就是l不变的原因。
还有一个有趣的例子
python 代码
- >>> L = [1, 2]
- >>> X = L * 2
- >>> X
- [1, 2, 1, 2]
- >>> Y = [L] * 2
- >>> Y
- [[1, 2], [1, 2]]
- >>> L[1] = 'aha'
- >>> X
- [1, 2, 1, 2]
- >>> Y
- [[1, 'aha'], [1, 'aha']]
实际上X的效果类似[1, 2] + [1, 2],Y的效果类似[L] + [L] = [L, L],这回该明白了吧。
2)比较
java中比较有==,<=,>=,equals,comparaTo等等。python中比较是==,<=,>=,is,is not。当我们使用python的比较时,它会自动比较两个对象中内部的数据结构。啥也不说了,例子是最好的teacher
python 代码
- >>> L1 = [1, ('a', 3)]
- >>> L2 = [1, ('a', 3)]
- >>> L1 == L2
- True
- >>> L1 is L2
- False
- >>> L1 < L2
- False
- >>> L1 > L2
- False
- >>> L2[1] = ('a', 2)
- >>> L2
- [1, ('a', 2)]
- >>> L1 < L2
- False
- >>> L1 > L2
- True
3) 消除指针影响
对于向列表和字典那样的可变类型来说,有时我们不需要指针式的引用(在java中,也有类似的需求),实际上解决起来很简单,例子说明一切
python 代码
- >>> L = [1, 2, 3]
- >>> M = ['x', L[:], 'y']
- >>> M
- ['x', [1, 2, 3], 'y']
- >>> L[1] = 'aha'
- >>> L
- [1, 'aha', 3]
- >>> M
- ['x', [1, 2, 3], 'y']
分享到:
相关推荐
在《Fluent Python 2》这本书中,作者通过创建扑克牌类来介绍Python编程的一些高级特性。这篇读书笔记主要探讨了扑克牌的起源、花色顺序以及特定牌的非正式称呼。 首先,我们来看看扑克牌的创建。在Python中,使用`...
总结来说,"Python中的万花筒"教学活动是一个结合了理论与实践的优秀教学案例,它巧妙地将Python基础语法与图像处理结合,通过生动有趣的项目引导学生深入学习。在教学过程中,注重培养学生的编程思维、问题解决能力...
3. **列表和元组**:讨论可变序列——列表和不可变序列——元组,包括创建、访问元素、切片、遍历、排序和操作方法。 4. **字典和集合**:介绍键值对存储的字典和无序不重复元素集合,以及它们在实际问题中的应用。 ...
中等职业教育(中职)程序设计课程在教学过程中面临的挑战和改革需求日益显著。本文以Python选修课为例,探讨了...通过这些改革措施,旨在为学生提供更实用、有趣且有效的学习体验,为他们的未来发展打下坚实的基础。
教学内容覆盖了Python的运行环境配置、基本语法结构(如输入/输出、数值计算)、条件语句的使用等,并通过一个具体的项目——根据身高体重计算标准体重,来引导学生深入理解和实践。 #### 教学知识点详解 1. **...
尽管第一版的书稿还比较粗糙,但它确实能够帮助学生完成阅读,并在课程中理解足够的内容,以便作者能够将课堂时间用于讨论更难、更有趣的话题,以及最重要的——让学生实践。 整体而言,《Think Python》旨在为读者...
使用`Jupyter Notebook`或`R Markdown`,我们可以将代码、分析过程和可视化结果整合成易于理解的报告,便于分享和讨论。 综上所述,Python在校园数据分析中的应用具有广泛性和实用性。通过对一卡通消费数据的深度...
在Python数据分析与挖掘实战的第二章节中,作者探讨了一个引人深思的问题——为何我们称之为“数据分析部”而不称为“ESP部”。这个问题的背后隐藏着对数据科学本质的理解和行业术语的深层次思考。在这个过程中,...
### Python 3 for Absolute Beginners —— 从零开始学习Python #### 书籍概览与核心内容解析 《Python 3 for Absolute Beginners》是一本专为编程新手设计的Python入门教材,由Tim Hall与J-P Stacey共同编写。...
本章节将介绍机器学习的基本概念和发展历程,并讨论常见的机器学习任务如分类、回归、聚类等,以及相关的评价指标。 ### 第三部分 监督学习——分类与回归 #### 第四章 KNN(k最近邻分类算法) KNN是一种基于实例...
【Python项目实例源码——代码雨】 在编程领域,"代码雨"通常指的是大量代码连续不断地出现在屏幕上,形成一种如同下雨般的视觉效果。这个Python项目实例是为初学者设计的,旨在通过实践来帮助他们更好地理解和掌握...
在Python编程语言中,可以利用其灵活性和丰富的库来创建各种有趣的图形,其中包括爱心效果。这些效果常用于编程表白或教学示例,因为它们既直观又具有趣味性。本篇文章将详细探讨如何通过Python实现爱心效果,以及...
本项目成功地利用Python和Django构建了一个中学地理——中国的江河湖泊教学网站,实现了教学资源的整合和在线学习的便捷性,对提升地理教学质量和普及地理知识具有积极意义。未来,可通过引入更多互动元素和个性化...
在Python编程世界里,我们可以利用各种创意来绘制有趣的图形,其中一种常见的练习就是用代码“绘制”出节日的象征——圣诞树。这个压缩包文件包含了使用Python的turtle模块创作的各种图形,包括樱花树、玫瑰、圣诞树...
标题"Python-nodejs版本玩微信跳一跳小游戏"表明我们将讨论两个主要的编程语言——Python和Node.js,并且它们都被用于实现这个小游戏的自动化。Python以其强大的库和易读性在自动化和数据处理方面广泛应用,而Node....
本节主要讨论了关于循环的几个重要知识点,包括for循环的注意事项、for循环与while循环的比较,以及一个有趣的案例——“能喝多少瓶啤酒”。 首先,针对for循环的注意事项,我们需要注意以下几点: 1. 循环变量是...
在教学实施方面,教师需关注以下几点:一是创设情境,将AI知识融入有趣的故事或活动中,使学习过程更加生动;二是注重实践,鼓励学生动手操作,提高他们的问题解决能力;三是培养学生的伦理意识,让他们了解AI技术...
本文是关于如何使用Python编程语言为儿童设计和实现经典...总的来说,这个Python贪吃蛇教程为儿童提供了一个有趣的编程实践项目,通过实际操作,他们可以更直观地理解编程原理,为将来深入学习计算机科学打下坚实基础。
在Python编程语言中,turtle库是一个非常有趣且实用的图形绘制模块,尤其适合初学者学习图形编程。这个库的名字来源于它的起源——LOGO编程语言中的一个代表性的元素,即一只可以移动和绘制图形的“小乌龟”。在这个...
这次活动鼓励参与者亲临现场,探索和学习开源Web开发中的新颖与有趣的知识。 【描述】中提到,会议的主旨在于让与会者能够深入理解和掌握开源Web编程,这可能涵盖了诸如HTML、CSS、JavaScript等基础语言,以及如PHP...