首先你输入了一个字符串,这个字符串是有大小的,电脑将其放在内存中,自动给其一个起始指针指向这个字符串的首位置,然后,你将这个字符串赋值给一个变量,这个对象又在内存中开辟出一个空间,这个变量会自动连接这个指向字符串起始位置的指针,然后你又将这个变量赋值给变量2,内存中又开辟出一个空间存放变量2的空间。那么,这个变量2把连接变量1的那个指向字符串起始位置的指针给抢走了,变量1就没有指针可连,如果它很长时间都是孤家寡人的话,它就失去了作用,失去了作用,就会被python中的垃圾清理站给回收。

如果你不想让你的变量1失去作用的话,就赶紧给他赋予一个字符串,他就又有指针可连,就有了工作,避免了被垃圾回车站清理;

 >>> name = "jack"
>>> name2 = "jack"
>>> print(name)
jack
>>> print(name2)
jack
>>> id(name)
60831136
>>> id(name2)
60831136
>>>

但有一个问题,上述代码怎么回事?是不是这两个变量都连接了指向字符串jack初始指针。那也就意味着是不是name就不应该永久清除?不明白啊!

为什么两个变量id是相同,因为字符串这个对象指针的初始位置是在内存中是不变的,so,可以得出一个结论,变量的id是根据字符串在内存中的位置所决定的!不知对不对?

我在一些资料上看到说,程序中必有算法,算法中必有数据,数据是由变量和常量组成,变量和常量有5种数据类:字符型、整型、浮点型、布尔型、空型!

也就是说变量有数据类型,但下面这个代码又如何解释呢?

  name = "jack"
>>> type(name)
<class 'str'>
>>> name = 123
>>> type(name)
<class 'int'>
>>>

name这个变量有两种类型,str和int。。所以我认为,变量应该没有类型,变量所引用的对象(1行的“jack”,,4行的“123”)才有类型,否则如何解释??

 list = [ "jack" , "tree" , 123 , "apple" ]
>>> id(list)
60721432
>>> list[3] = "apppppppppppppppppppppppppppppppppppppppppppppppple"
>>> print(list)
['jack', 'tree', 123, 'apppppppppppppppppppppppppppppppppppppppppppppppple']
>>> id(list)
60721432
>>>

上述这段代码,明明列表中的元素都改变,前面说过,变量的id是由对象决定,可现在对象中的内容都改变呢,怎么变量的id还不变呢?

我猜,这就是传说中的可变对象,列表中的每个元素都应该有个指针,这个指针的初始位置是不变的,定义了四个元素,应该有四个指针,这四个初始位置的指针分别是0,1,2,3

然后变量用一根线连接这四个指针的初始位置,所以无论列表中的元素怎么变,那四个指针的初始位置是一定的,那根线也是一定的,so,,变量连接对象的指针初始位置不变,id也不变,,终结结论,变量的id由连接指向对象的初始位置的指针所决定!(纯属遐想^_^)

小白关于python 对象和内存的关系的一些感悟和疑惑,望大神指教的更多相关文章

  1. Python 用ctypes观察Python对象的内存结构 -- (转)

    !!!强烈推荐的好文章!!! 对象的两个基本属性 Python所有对象结构体中的头两个字段都是相同的: refcnt:对象的引用次数,若引用次数为0则表示此对象可以被垃圾回收了. typeid:指向描 ...

  2. 小白学Python(18)——pyecharts 关系图 Graph

    Graph-基本示例 import json import os from pyecharts import options as opts from pyecharts.charts import ...

  3. python如何从内存地址上加载pythn对象

    python如何从内存地址上加载pythn对象 在python中我们可以通过id函数来获取某个python对象的内存地址,或者可以通过调用对象的__repr__魔术函数来获取对象的详细信息 def t ...

  4. python的变量,对象的内存地址以及参数传递过程

    作为一个由c/c++转过来的菜鸟,刚接触Python的变量的时候很不适应,应为他的行为很像指针,void* ,不知道大家有没有这样的感觉.其实Python是以数据为本,变量可以理解为标签.作为c/c+ ...

  5. cPickle对python对象进行序列化,序列化到文件或内存

    pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别.要和其他语言交互,可以使用内置的json包 cPickle可以对任意一种类型的python对象进 ...

  6. 《转》python对象

    http://www.cnblogs.com/BeginMan/p/3160044.html 一.学习目录 1.pyhton对象 2.python类型 3.类型操作符与内建函数 4.类型工厂函数 5. ...

  7. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. Python 对象的引用计数和拷贝

    Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...

  9. Python对象体系揭秘

    Guido用C语言创造了Python,在Python的世界中一切皆为对象. 一.C视角中的Python对象 让我们一起追溯到源头,Python由C语言实现,且向外提供了C的API http://doc ...

随机推荐

  1. 100. Same Tree(leetcode)

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  2. Java基础总结--面向对象2

    1.存在相关的多个方法就封装在一个类中,方法没调用到特有数据,需要静态化2.假如一个类所有方法都是静态方法,为了保证不被其他创建对象,可以将该类的构造方法私有化3.文档注释javadoc-按照规定注释 ...

  3. 初学者易上手的SSH-hibernate03 三大状态与缓存

    这章主要来浅的学习下hibernate三大状态与缓存.首先来看下三大状态: 如上图,三大状态分别为临时状态(Transient),持久化状态(Persistent),游离状态(Detached).那么 ...

  4. echarts教程-asp.net+ashx实现堆积柱状

    说说看.崔西莲夫人紧接着说. 想不到史春吉是这种人. 你会这样说倒是有趣,因为这正是我当时的感觉.这跟奈维尔的个性不合.奈维尔,就像大部分男人一样,通常都是尽量避开任何可能造成尴尬或不愉快的场面.我怀 ...

  5. 聊聊 Material Design 里,阴影的那些事儿!

    当你的设计师要求你在某个 View 上增加阴影效果,那你只需要认真阅读本文,阴影的问题就不再是问题. 一.前言 设计师的世界,与常人不同,有时候想要扁平化的风格,有时候又想要拟物化的风格.而在 Mat ...

  6. C#读写Shapefile

    Shapefile文件是ArcGIS存储矢量要素的标准格式,要读写Shapefile最简单的方法当然是基于ArcObject(或者ArcEngine)开发,不过网上也有一些开源的解译Shapefile ...

  7. OpenCV Image Watch 调试插件

    昨晚偶然发现vs2012的这个很神奇的插件,对于经常使用opencv的人来说,这个插件无疑是我们的调试神器.今天马上下载试用,感觉超级棒!~以后要想查看图像结果,不用再imshow了! Image W ...

  8. Paint the Grid Again (隐藏建图+优先队列+拓扑排序)

    Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black or ...

  9. Azkaban安装部署

    在root的用户下搭建的 • Azkaban安装部署(可参照:http://azkaban.github.io/azkaban/docs/latest/) 1):前提 安装JDK,安装Hadoop,H ...

  10. MVC架构下,使用NPOI读取.DOCX文档中表格的内容

    1.使用NPOI,可以在没有安装office的设备上读wiod.office.2.本文只能读取.docx后缀的文档.3.MVC架构中,上传文件只能使用form表单提交,转到控制器后要依次实现文件上传. ...