Python论坛  - 讨论区

标题:Re: Re: [python-chinese]问一个问

2005年07月01日 星期五 12:54

kassarar kassarar at 126.com
Fri Jul 1 12:54:28 HKT 2005

喔~~谢谢,但,怎么判断什么情况下创建引用,什么情况下创建新对象呢

> kassarar wrote:
> > 我用的是python2.4.1
> > 
> >>>> TypeDict=dict(zip(AllTypes,[[]]*len(AllTypes)))
> 
> 把这句改成
> 
> TypeDict = dict(zip(AllTypes, [[] for t in AllTypes]))
> 
> 不然你这里创建的列表指向的都是同一个[]
> 
> BTW, 我觉得写成 TypeDict = dict((t, []) for t in AllTypes) 更pythonic些
> 
> [...]
> > 
> >>>> TypeDict['IntType'].append('k')
> >>>> TypeDict
> > {'IntType': ['k'], 'TypeType': ['a', 'b'], 'CodeType': ['k'],
> > 'BooleanType': ['k'], 'UnboundMethodType': ['k'], 'StringType':
> > ['k'], 'BuiltinMethodType': ['k'], 'FloatType': ['k'], 'DictionaryType':
> > ['k'], 'NotImplementedType': ['k'], 'BuiltinFunctionT
> > ype': ['k'], 'DictProxyType': ['k'], 'GeneratorType': ['k'],
> > 'InstanceType': ['k'], 'ObjectType': ['k'], 'DictType': ['k'], 'F
> > ileType': ['k'], 'EllipsisType': ['k'], 'ListType': ['k'], 'MethodType':
> > ['k'], 'TupleType': ['k'], 'ModuleType': ['k'], 'Fram
> > eType': ['k'], 'LongType': ['k'], 'BufferType': ['k'], 'TracebackType':
> > ['k'], 'ClassType': ['k'], 'UnicodeType': ['k'], 'Slic
> > eType': ['k'], 'ComplexType': ['k'], 'LambdaType': ['k'],
> > 'FunctionType': ['k'], 'XRangeType': ['k'], 'NoneType': ['k']}
> > 
> > #但这里就不明白了,怎么每一个都加了呢
> [...]
> 
> -- 
> Qiangning Hong
> 
>  ___________________________________
> ( It's like deja vu all over again. )
> (                                   )
> ( -- Yogi Berra                     )
>  -----------------------------------
>      o
>       o
>        ("`-'  '-/") .___..--' ' "`-._
>          ` *_ *  )    `-.   (      ) .`-.__. `)
>          (_Y_.) ' ._   )   `._` ;  `` -. .-'
>       _.. `--'_..-_/   /--' _ .' ,4
>    ( i l ),-''  ( l i),'  ( ( ! .-'
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050701/d6f3bc40/attachment-0001.htm

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

2005年07月01日 星期五 13:06

shhgs shhgs.efhilt at gmail.com
Fri Jul 1 13:06:29 HKT 2005

我的一家之言,未必正确,姑且听听。

看等号,等号左边就是引用,等号右边就是实例。

a = 1, 
a 是引用,1是对象。
把1想象成是Integer类的一个静态成员。

b = a
b是引用,a是对象。
a指向1这个Integer类的静态成员,所以b也指向这个成员。

除了等号,def和class也可以把引用和对象绑定在一起,不过这个专题以后有机会再说。


On 7/1/05, kassarar <kassarar at 126.com> wrote:
> 喔~~谢谢,但,怎么判断什么情况下创建引用,什么情况下创建新对象呢
> 
> 
> > kassarar wrote:
> > > 我用的是python2.4.1
> > > 
> > >>>> TypeDict=dict(zip(AllTypes,[[]]*len(AllTypes)))
> > 
> > 把这句改成
> > 
> > TypeDict = dict(zip(AllTypes, [[] for t in AllTypes]))
> > 
> > 不然你这里创建的列表指向的都是同一个[]
> > 
> > BTW, 我觉得写成 TypeDict = dict((t, []) for t in AllTypes) 更pythonic些
> > 
> > [...]
> > > 
> > >>>> TypeDict['IntType'].append('k')
> > >>>> TypeDict
> > > {'IntType': ['k'], 'TypeType': ['a', 'b'], 'CodeType': ['k'],
> > > 'BooleanType': ['k'], 'UnboundMethodType': ['k'], 'StringType':
> > > ['k'], 'BuiltinMethodType': ['k'], 'FloatType': ['k'], 'DictionaryType':
> > > ['k'], 'NotImplementedType': ['k'], 'BuiltinFunctionT
> > > ype': ['k'], 'DictProxyType': ['k'], 'GeneratorType': ['k'],
> > > 'InstanceType': ['k'], 'ObjectType': ['k'], 'DictType': ['k'], 'F
> > > ileType': ['k'], 'EllipsisType': ['k'], 'ListType': ['k'], 'MethodType':
> > > ['k'], 'TupleType': ['k'], 'ModuleType': ['k'], 'Fram
> > > eType': ['k'], 'LongType': ['k'], 'BufferType': ['k'], 'TracebackType':
> > > ['k'], 'ClassType': ['k'], 'UnicodeType': ['k'], 'Slic
> > > eType': ['k'], 'ComplexType': ['k'], 'LambdaType': ['k'],
> > > 'FunctionType': ['k'], 'XRangeType': ['k'], 'NoneType': ['k']}
> > > 
> > > #但这里就不明白了,怎么每一个都加了呢
> > [...]
> > 
> > -- 
> > Qiangning Hong
> > 
> > ___________________________________
> > ( It's like deja vu all over again. )
> > ( )
> > ( -- Yogi Berra )
> > -----------------------------------
> > o
> > o
> > ("`-' '-/") .___..--' ' "`-._
> > ` *_ * ) `-. ( ) .`-.__. `)
> > (_Y_.) ' ._ ) `._` ; `` -. .-'
> > _.. `--'_..-_/ /--' _ .' ,4
> > ( i l ),-'' ( l i),' ( ( ! .-'
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> > 
> 
> 
> 
> 
> 
> 
> 
>    什么邮箱可以注册长度3位用户名,好记又好用? 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
>

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

2005年07月01日 星期五 16:30

Qiangning Hong hongqn at gmail.com
Fri Jul 1 16:30:30 HKT 2005

lst = [[]] * n 等价于:

x = []
lst = []
for i in range(n):
    lst.append(x)

lst = [ [] for x in range(n) ] 等价于:

lst = []
for i in range(n):
    lst.append([])

看出区别了吗?
第一种方法的lst中的每一个元素都指向同一个[](即赋值给x上的那个)。而第二
种方法的lst中的每一个元素则为不同的[]

这是在使用 [x] * n 语法时要特别注意的地方。


kassarar wrote:
> 喔~~谢谢,但,怎么判断什么情况下创建引用,什么情况下创建新对象呢
> 
>> kassarar wrote:
>> > 我用的是python2.4.1
>> >
>> > >>> TypeDict=dict(zip(AllTypes,[[]]*len(AllTypes)))
>>
>> 把这句改成
>>
>> TypeDict = dict(zip(AllTypes, [[] for t in AllTypes]))
>>
>> 不然你这里创建的列表指向的都是同一个[]
>>
>> BTW, 我觉得写成 TypeDict = dict((t, []) for t in AllTypes) 更pythonic些
>>
>> [...]
>> >
>> > >>> TypeDict['IntType'].append('k')
>> > >>> TypeDict
>> > {'IntType': ['k'], 'TypeType': ['a', 'b'], 'CodeType': ['k'],
>> > 'BooleanType': ['k'], 'UnboundMethodType': ['k'], 'StringType':
>> > ['k'], 'BuiltinMethodType': ['k'], 'FloatType': ['k'], 'DictionaryType':
>> > ['k'], 'NotImplementedType': ['k'], 'BuiltinFunctionT
>> > ype': ['k'], 'DictProxyType': ['k'], 'GeneratorType': ['k'],
>> > 'InstanceType': ['k'], 'ObjectType': ['k'], 'DictType': ['k'], 'F
>> > ileType': ['k'], 'EllipsisType': ['k'], 'ListType': ['k'], 'MethodType':
>> > ['k'], 'TupleType': ['k'], 'ModuleType': ['k'], 'Fram
>> > eType': ['k'], 'LongType': ['k'], 'BufferType': ['k'], 'TracebackType':
>> > ['k'], 'ClassType': ['k'], 'UnicodeType': ['k'], 'Slic
>> > eType': ['k'], 'ComplexType': ['k'], 'LambdaType': ['k'],
>> > 'FunctionType': ['k'], 'XRangeType': ['k'], 'NoneType': ['k']}
>> >
>> > #但这里就不明白了,怎么每一个都加了呢
>> [...]

-- 
Qiangning Hong

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号