由于没时间系统学习下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. 【Android】笔记

    一.环境搭建 1.  下载JDK, JRE , 设置JDK 和 JRE环境变量 , PATH C:\jdk1.6.0_15\bin; JAVA_HOME C:\jdk1.6.0_15 重启电脑,    ...

  2. windows 日志清理和设置

    Windows日志路径 c:/windows/system32/winevt/logs 这里的日志文件可以ctrl+a 选中后使用shift+delete进行删除,删不掉的可以点击跳过.   在“管理 ...

  3. Linux软链接创建及删除

    1.创建软链接 具体用法是:ln  -s   [源文件]   [软链接文件]. [root@localhost folder]# pwd /tmp/folder [root@localhost fol ...

  4. 分布式任务队列 Celery —— Task对象

    转载至 JmilkFan_范桂飓:http://blog.csdn.net/jmilk  目录 目录 前文列表 前言 Task 的实例化 任务的名字 任务的绑定 任务的重试 任务的请求上下文 任务的继 ...

  5. Java在常见的spring面试问题TOP50

    1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年.这是第一个支持注解的版本. Spr ...

  6. 【jekins】jenkins构建触发

    一.定时构建的语法 * * * * *(五颗星,中间用空格隔开)第一颗*表示分钟,取值0~59第二颗*表示小时,取值0~23第三颗*表示一个月的第几天,取值1~31第四颗*表示第几月,取值1~12第五 ...

  7. java 值传递还是引用传递

    首先看一下这篇文章 -- 跳 这篇文章就进行了大致的介绍,以及一些简单的例子,但是还缺少一个关键的例子: public class QQ { public static void main(Strin ...

  8. [转载]Java并发编程:volatile关键字解析

    Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...

  9. Elasticsearch: Index template

    Index template定义在创建新index时可以自动应用的settings和mappings. Elasticsearch根据与index名称匹配的index模式将模板应用于新索引.这个对于我 ...

  10. BZOJ 2124 (线段树 + hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2124 题意:给一个1到N的排列{Ai},询问是否存在1<=p1<p2< ...