2005年07月09日 星期六 15:37
举例一: >>> s=[[0]*3]*2 >>> s ...[[0, 0, 0], [0, 0, 0]] >>> s[0][2] +=1 >>> s ...[[0, 0, 1], [0, 0, 1]] #咦,s[0][2]变成1,s[1][2]怎么也成1了!? 举例二: >>> s = [range(3),range(4,7)] >>> s ...[[0, 1, 2], [4, 5, 6]] >>> s[0][2] +=1 >>> s ...[[0, 1, 3], [4, 5, 6]] #这才正常:s[0][2]为2+1=3,s[1][2]没变!
2005年07月09日 星期六 15:57
这种问题基本上算是老生常谈了,建议你看一看以前的讨论。简单地说 [0]*3是对同一个对常重复3次,相当于是生成了三个指向同一个对象的引用。因此你使用一个引用来修改对象,对其它两个相当于同时改变了。而例二是不同的对象,因此对其中一个修改不会影响其它的对象。 象类似的问题还是去列表中或google中查一查,太多了。 在 05-7-9,Person<person.lee at gmail.com> 写道: > 举例一: > >>> s=[[0]*3]*2 > >>> s > ...[[0, 0, 0], [0, 0, 0]] > >>> s[0][2] +=1 > >>> s > ...[[0, 0, 1], [0, 0, 1]] > #咦,s[0][2]变成1,s[1][2]怎么也成1了!? > > 举例二: > >>> s = [range(3),range(4,7)] > >>> s > ...[[0, 1, 2], [4, 5, 6]] > >>> s[0][2] +=1 > >>> s > ...[[0, 1, 3], [4, 5, 6]] > #这才正常:s[0][2]为2+1=3,s[1][2]没变! > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
2005年07月09日 星期六 16:00
再举一例! 举例三: >>> s = [[0, 0, 0], [0, 0, 0]] >>> s [[0, 0, 0], [0, 0, 0]] >>> s[0][2] +=1 >>> s [[0, 0, 1], [0, 0, 0]] 原来问题出在*(重复运算)!可能因为重复的是引用,而不是值。 不知道这算bug,还是正常现象? 在 05-7-9,Person<person.lee at gmail.com> 写道: > 举例一: > >>> s=[[0]*3]*2 > >>> s > ...[[0, 0, 0], [0, 0, 0]] > >>> s[0][2] +=1 > >>> s > ...[[0, 0, 1], [0, 0, 1]] > #咦,s[0][2]变成1,s[1][2]怎么也成1了!? > > 举例二: > >>> s = [range(3),range(4,7)] > >>> s > ...[[0, 1, 2], [4, 5, 6]] > >>> s[0][2] +=1 > >>> s > ...[[0, 1, 3], [4, 5, 6]] > #这才正常:s[0][2]为2+1=3,s[1][2]没变! >
2005年07月09日 星期六 16:04
没想到这是个老生常谈的问题,谢谢limodou了! 在 05-7-9,limodou<limodou at gmail.com> 写道: > 这种问题基本上算是老生常谈了,建议你看一看以前的讨论。简单地说 > [0]*3是对同一个对常重复3次,相当于是生成了三个指向同一个对象的引用。因此你使用一个引用来修改对象,对其它两个相当于同时改变了。而例二是不同的对象,因此对其中一个修改不会影响其它的对象。 > > 象类似的问题还是去列表中或google中查一查,太多了。 > > 在 05-7-9,Person<person.lee at gmail.com> 写道: > > 举例一: > > >>> s=[[0]*3]*2 > > >>> s > > ...[[0, 0, 0], [0, 0, 0]] > > >>> s[0][2] +=1 > > >>> s > > ...[[0, 0, 1], [0, 0, 1]] > > #咦,s[0][2]变成1,s[1][2]怎么也成1了!? > > > > 举例二: > > >>> s = [range(3),range(4,7)] > > >>> s > > ...[[0, 1, 2], [4, 5, 6]] > > >>> s[0][2] +=1 > > >>> s > > ...[[0, 1, 3], [4, 5, 6]] > > #这才正常:s[0][2]为2+1=3,s[1][2]没变! > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > -- > I like python! > My Donews Blog: http://www.donews.net/limodou > New Google Maillist: http://groups-beta.google.com/group/python-cn > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年07月09日 星期六 17:26
多查查网上就知道了。我向大家公布一下我找到的两篇文章,内容另写。 在 05-7-9,Person<person.lee at gmail.com> 写道: > 没想到这是个老生常谈的问题,谢谢limodou了! > > 在 05-7-9,limodou<limodou at gmail.com> 写道: > > 这种问题基本上算是老生常谈了,建议你看一看以前的讨论。简单地说 > > [0]*3是对同一个对常重复3次,相当于是生成了三个指向同一个对象的引用。因此你使用一个引用来修改对象,对其它两个相当于同时改变了。而例二是不同的对象,因此对其中一个修改不会影响其它的对象。 > > > > 象类似的问题还是去列表中或google中查一查,太多了。 > > > > 在 05-7-9,Person<person.lee at gmail.com> 写道: > > > 举例一: > > > >>> s=[[0]*3]*2 > > > >>> s > > > ...[[0, 0, 0], [0, 0, 0]] > > > >>> s[0][2] +=1 > > > >>> s > > > ...[[0, 0, 1], [0, 0, 1]] > > > #咦,s[0][2]变成1,s[1][2]怎么也成1了!? > > > > > > 举例二: > > > >>> s = [range(3),range(4,7)] > > > >>> s > > > ...[[0, 1, 2], [4, 5, 6]] > > > >>> s[0][2] +=1 > > > >>> s > > > ...[[0, 1, 3], [4, 5, 6]] > > > #这才正常:s[0][2]为2+1=3,s[1][2]没变! > > > > > > _______________________________________________ > > > python-chinese list > > > python-chinese at lists.python.cn > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > -- > > I like python! > > My Donews Blog: http://www.donews.net/limodou > > New Google Maillist: http://groups-beta.google.com/group/python-cn > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > -- I like python! My Donews Blog: http://www.donews.net/limodou New Google Maillist: http://groups-beta.google.com/group/python-cn
Zeuux © 2025
京ICP备05028076号