首先你输入了一个字符串,这个字符串是有大小的,电脑将其放在内存中,自动给其一个起始指针指向这个字符串的首位置,然后,你将这个字符串赋值给一个变量,这个对象又在内存中开辟出一个空间,这个变量会自动连接这个指向字符串起始位置的指针,然后你又将这个变量赋值给变量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. JS的基本类型(小知识)

    一:js中的基本类型: 基本类型:boolen, string ,number,null,undefined 引用类型:object,和函数 二.undedifned和null的区别: 1 undef ...

  2. LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  3. <ul>标签设计简单导航栏

    当我们刚开始学习html/css的时候,对于padding .float.行内元素.块级元素用起来可能会混淆,但是呢我们可以通过一个简单的nav案例来清楚各自具体作用. 1.首先我们创建一个大的容器, ...

  4. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)

    目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和 ...

  5. javascript 备忘 细节 相关

    DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕.   var a = [1,2,3,4]; var length = a.length; alert((leng ...

  6. Python爬虫入门:Urllib库的高级使用

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  7. ldap数据库--ldapsearch,ldapmodify

    简单介绍一下ldapsearch命令,在ldap搜索条目时很有用,只要适当调整filter就可以. 命令如下: ldapsearch -h hostname -p port -b baseDN -D ...

  8. PHP基础入门(三)【PHP中的数组】

    PHP数组的分类 按照下标的不同,PHP数组分为关联数组与索引数组: 索引数组:下标从0开始,依次增长: 关联数组: 下标为字符串格式,每个下标字符串与数组的值一一关联对应.(有点像对象的键值对) 关 ...

  9. Linux服务器上安装vsftpd

    1.首先判断你服务器上是否安装了vsftpd rpm -q vsftpd   2.安装vsftpd yum -y install vsftpd   3.重启vsftpd service vsftpd ...

  10. Jdbc访问数据库篇

    一万年太久,只争朝夕 What JDBC 上部 JDBC(Java DataBase Connectivity)Java 数据库连接,主要提供编写 Java 数据库应用程序的 API 支持 java. ...