Python论坛  - 讨论区

标题:Re[2]: 答复: Re: [python-chinese] 关于相同列表与字符串的id值问题

2004年08月09日 星期一 13:13

Zoom.Quiet zoomq at itcase.com
Mon Aug 9 13:13:19 HKT 2004

Hollo hoxide:

嗯嗯!看来这也是 Python 处理内存的策略之一!
凡是指向定量的,全部是复制引用!

  [f:\4nt401]python
Python 2.3.4 (CJK/SJIS) (#53, May 27 2004, 05:49:12) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a=["time"]
>>> type(a)

>>> b=("time")
>>> b
'time'
>>> type(b)

>>> c=("time",)
>>> type(c)

>>> c
('time',)
>>> d=c
>>> id(c)
9681424
>>> id(d)
9681424
>>>


/******** [2004-08-09]13:10:57 ; hoxide wrote:

hoxide> Gary Jia,您好!

hoxide> 	这点我的确没看出来:)

hoxide> ======= 2004-08-09 12:21:23 您在来信中写道:=======

>>有一点你搞错了
>>那就是('time')  并不是元组它仍然是一个字符窜
>>你可以通过type方法来看。
>>如果你需要一个元组应该是 ('time',)
>>所以两个值相等的元组和序列都有不同的地址。
>>
>>-----邮件原件-----
>>发件人: python-chinese-bounces at lists.python.cn
>>[mailto:python-chinese-bounces at lists.python.cn] 代表 hoxide
>>发送时间: 2004年8月9日 11:29
>>收件人: python-chinese at lists.python.cn
>>主题: Re: Re: [python-chinese] 关于相同列表与字符串的id值问题
>>
>>Dirk Ye,您好! 
>>
>>     就是这么回事.
>>
>>======== 2004-08-09 10:19:25 您在来信中写道: ========
>>
>>我的理解:
>> 
>>   
>> 这里的问题不仅仅是引用这么简单,其实这是普遍的编译器(解释器也应该如此)
>>针对性能的一种优化,具体分析如下:
>>   
>> 编译器/解释器为了节约系统资源以及提高本身的效率,面对常量值和变量值会区
>>别对待:
>> 
>>   
>> 1、当解释器看到两个相同值的常量变量的时候,他们不会申请新的内存,只是增
>>加第一个变量的地址引用数,所以你看到初始的a和b是相同的地址;但如果你要改变a
>>或b的值以后,a和b的引用地址将不再相同,因为解释器会为修改的变量重新申请内存
>>并修改相应的地址引用。
>>   
>> 2、当解释器遇到的是可变变量的时候,它认为用户会随时改变变量值,所以使用
>>的是不同的地址。
>> 
>>   
>> 在Python中,字符串和元组是属于常量变量,他们符合第一种情况;而序列属于可
>>变变量,符合第二种情况。
>> 
>>    验证如下:
>> 
>> 
>>>>> a = "time"
>>>>> b = "time"
>>>>> id(a)
>>16636288
>>>>> id(b)
>>16636288
>>>>> a += "s"
>>>>> id(a)
>>20165312
>>>>> id(b)
>>16636288
>>>>> m = ("time")
>>>>> n = ("time")
>>>>> id(m)
>>16636288
>>>>> id(n)
>>16636288
>>>>> s = ["time"]
>>>>> t = ["time"]
>>>>> id(s)
>>20361424
>>>>> id(t)
>>20515760
>>>>> 
>> 
>> 
>>请指正!!!
>> 
>>   
>> 
>> 
>>----- Original Message -----
>>From: zhou hunter
>>To: python-chinese at lists.python.cn
>>Sent: Sunday, August 08, 2004 7:49 AM
>>Subject: [python-chinese] 关于相同列表与字符串的id值问题
>>
>>
>>wish you a good day:
>>          在整理笔记中有一个问题,举例子如下:
>>>>> a="time"
>>>>> b="time"
>>>>> id(a)
>>12616688
>>>>> id(b)
>>12616688#id值可以看出a,b指向且都指向“time"
>>>>> a=['time']
>>>>> b=['time']
>>>>> id(a)
>>15300640
>>>>> id(b)
>>15300680#可以看除a,b 指向了 “【"time"】”但两个time却不同。
>>1,id是对数据的唯一标识符,"time"与"time"是同一数据,而列表的却截然不同
>>2,数据应是储存在内存的,那么“time"与'time'是同一位置,而列表的却不是。
>>我想请问到底为什么一旦列表,即使相同表的实际指向却是不同的,而不列表却相同?
>>(我正在搜索这些资料,希望可以找到)
>>
>>        谢谢
>>                zhou_hunter
>>
>>
>>
>>
>>Do You Yahoo!?
>>150万曲MP3疯狂搜,带您闯入音乐殿堂
>>美女明星应有尽有,搜遍美图、艳图和酷图
>>1G就是1000兆,雅虎电邮自助扩容! 
>>
>>
>>
>>_______________________________________________
>>python-chinese list
>>python-chinese at lists.python.cn
>>http://python.cn/mailman/listinfo/python-chinese
>>
>>
>>= = = = = = = = = = = = = = = = = = = = = = 
>>        致
>>礼!
>>
>>              hoxide
>>              hoxide_dirac at yahoo.com.cn
>>               2004-08-09
>>_______________________________________________
>>python-chinese list
>>python-chinese at lists.python.cn
>>http://python.cn/mailman/listinfo/python-chinese
>>

hoxide> = = = = = = = = = = = = = = = = = = = =
			

hoxide>         致
hoxide> 礼!
 
				 
hoxide>         hoxide
hoxide>         hoxide_dirac at yahoo.com.cn
hoxide>           2004-08-09



********************************************/

-- 
Free as in Freedom

 Zoom.Quiet                           

#=========================================#
]Time is unimportant, only life important![
#=========================================#

sender is the Bat!2.12.00



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号