python编程8g的内存够么_小白关于python 对象和内存的关系的一些感悟和疑惑,望大神指教...

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

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

1 >>> name = "jack"

2 >>> name2 = "jack"

3 >>> print(name)4 jack5 >>> print(name2)6 jack7 >>>id(name)8 60831136

9 >>>id(name2)10 60831136

11 >>>

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

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

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

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

1 name = "jack"

2 >>>type(name)3

4 >>> name = 123

5 >>>type(name)6

7 >>>

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

1 list = [ "jack" , "tree" , 123 , "apple"]2 >>>id(list)3 60721432

4 >>> list[3] = "apppppppppppppppppppppppppppppppppppppppppppppppple"

5 >>> print(list)6 ['jack', 'tree', 123, 'apppppppppppppppppppppppppppppppppppppppppppppppple']7 >>>id(list)8 60721432

9 >>>

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值