由于没时间系统学习下Python

只能见一个问题探究一个问题了

一、初级 - 对象

关于Python中的数据类型,今天重新认识了下。【参考】

首先,Python中,对象才有类型, 变量是没有类型的,它只是对象的“引用”。

其次,Python中对象被分为两类:可更改对象和不可更改对象(包括numbers, strings, tuples)。

a = 1   #一个指向int数据类型的a(再次提醒,a没有类型)

list_a = [1]   #一个指向list类型对象的list_a ,这个list中包含一个int对象1

a = 2       # a指向一个新的int对象,其值为2。内存中原始的1对象因为不能改变,于是被“抛弃”

list_a[0] = 2     #list_a指向的list类型对象的第一个元素指向一个新的int对象,原来的对象1被抛弃。

因此,Python中的函数参数传递也分为两类:

1.不可变对象参数调用

def ChangeInt( a ):
a = 10
nfoo = 2
ChangeInt(nfoo)
print nfoo #结果是2

2.可变对象参数调用

def ChangeList( a ):
a[0] = 10
lstFoo = [2]
ChangeList(lstFoo )
print lstFoo #结果是[10]

二、进阶 - 拷贝

先理解深浅拷贝的概念:

  • 浅拷贝

    • 所谓的浅拷贝就是拷贝指向对象的指针,意思就是说:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间.
    • 浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误
  • 深拷贝

    • 所谓的深拷贝指拷贝对象的具体内容,其内容地址是自助分配的,拷贝结束之后,内存中的值是完全相同的,但是内存地址是不一样的,两个对象之间相互不影响,也互不干涉.

认真理解 图解Python深拷贝和浅拷贝 中的例子,应该就可以进阶了我猜

 
小小地总结一下:

1.对象赋值, wilber = will ,之后只要通过will改动其所指向的对象中的元素,wilber所指的对象中的元素就会随之改变;反之(通过wilber进行改动)亦然。

  ·但如果will指向的是不可更改对象,那么will的改动只会让它自己指向新的内存,而wilber不会改变(直接从“赋值”的角度想就可以了)

  ·如果will指向的是可变更对象,那wilber = will 就相当于是给这个对象起了个“别名”,彼此的改动都互相影响(想起当初的C++了…)

2.浅拷贝,wilber = copy.copy(will),之后通过will改动其所指向的对象中的元素,看被改变的元素是可更改对象还是不可更改对象:

  ·如果是可更改对象,那wilber所指的对象中的元素随其发生改变;

  ·如果是不可更改对象,那么wilber不会发生改变(看例子中的图,一目了然)。

  反之亦然。

  # 其实从这个角度思考更方便明了些,但没上面这种透彻

3.深拷贝,wilber = copy.deepcopy(will),二者之间的改动互不相干(虽然Python的设计是将will和wilber分别所指对象中的可更改对象共享了,但事实上只要改变了这些就会被重新赋值,我猜这只是Python用来节约内存的一个技巧,不要被这个搞混了)。


三、扩展

global关键字 - Python的global语句使用

Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。

在不将函数外的变量指针加入参数列表的情况下,函数想要改变函数外的变量,可考虑使用global关键字

Python中的变量、对象的更多相关文章

  1. python中的变量对象小结2

    # .变量名和数据内容是分开存储的. # .数据保存在内存中的一个位置(地址). # .变量中保存着数据在内存中的地址. # 引用就是变量中记录数据的地址. #不可变变量,重新赋值时会重新开辟一个地址 ...

  2. Python中的变量引用对象需注意的几点

    Python中的变量引用对象需注意的几点 分类:Python (55)  (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...

  3. python中的变量与对象

    一. 什么是变量 变量就是以前学习的数学中常见的等式x = 3(x是变量,3是变量值),在编程中,变量不仅可以是数学,还可以是任意数据类型 二. 变量的命名规则 变量名必须是英文大小写.数字和_的组合 ...

  4. python学习(九)python中的变量、引用和对象的关系

    <Think In Java>中说到过"万事万物皆对象",这句话也可以用在Python中. 感觉Python中的变量有点像Javascript中的变量,是弱类型的,但是 ...

  5. python中的变量和数据类型

    一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...

  6. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

  7. Python中的可变对象和不可变对象

    Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一 ...

  8. 《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  9. Python中repr(变量)和str(变量)的返回值有什么区别和联系

    Python中repr(变量)和str(变量)都返回一个描述对象的字符串,二者有关联又有不同.由于Python3.0后都是新式类,我们的分析也是基于新式类进行的.基于object派生的新式类中二者之间 ...

  10. 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

随机推荐

  1. Windows 查看端口使用、根据pid查找引用程序

    1.查看特定端口的使用情况:以80端口为例,输入命令 netstat -aon|findstr "80" 2.根据PID号找到对应的程序:以PID是6776为例,输入命令taskl ...

  2. vue关于路由容易忽略的点

    1.去掉导航里的# 在router.js中 export default new Router{ mode:'history' } 2.指定激活项的class 在router.js中 export d ...

  3. 统一用户认证系统CUAS实现要点

    背景: 基于目前存在多套员工使用的日常工作子系统,现状为各系统各自有一套用户体系,员工需要记住各系统的用户名.密码等信息,还需要登录多个系统,重复工作量颇多.统一用户认证组件将用户名.密码等信息统一存 ...

  4. KEIL仿真出现 EVALUATION MODE

    原因是KEIL MDK没有破解,重新破解即可

  5. 如何在调用Marketing Cloud contact创建API时增加对扩展字段的支持

    需求:扩展字段"微信ID"是我创建出来的extension field,我想用Marketing Cloud提供的contact creation API,在创建contact时也 ...

  6. VUE【一、概述】

    早上写的忘了保存..还有很多唠叨的内容...哎又得重新写一遍..想吐槽那个自动保存有卵用.. 今天周一,早上起来继续 由于周六加了一整天班,导致周日无心学习,一天都在玩游戏看电影,到了晚上反而更加空虚 ...

  7. 【Day3】5.Python中的lxml模块

    import lxml.etree as le with open('edu.html','r',encoding='utf-8') as f: html = f.read() html_x = le ...

  8. Girls Like You--Maroon 5

    Girls Like You Spent 24 hours, I need more hours with you (24小时过去 还想和你 相处更久) You spent the weekend g ...

  9. okhttp任务调度核心类dispatcher解析

    在之前已经对okhttp的同步和异步请求的流程进行了详细的分析,其中任务调度是由dispatcher来实现的,非常重要,所以这次专门来对它进行一个了解,带着问题去进行探究: Q1:okhttp如何实现 ...

  10. ftp上传文件和下载文件

    public class FtpService { #region Fields and attributes private readonly int BufLen = 2048; /// < ...