首页新闻找找看学习计划

python list 分片问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-04-22 18:58

我在网上看到一篇文章有这样的内容“对于list,切片会返回一个新的list,而不会改变原有的list“,但是下面的这段代码:

def change(x):
  x[1:3] = ['o', 'k']

a = [10, 20, 30]print('a is {0}'.format(a))
change(a)
print('a is {0}'.format(a))

对于函数内部的这一行,x[1:3]得到的是一个新的list?如果是一个新的list应该不会对a的内容造成影响啊?为什么a会改变?

运行结果:

a is [10, 20, 30]
a is [10, 'o', 'k']

问题补充:

Thank you all, especially @cai870808. Thank you.

XiaoweiLiu的主页 XiaoweiLiu | 初学一级 | 园豆:179
提问于:2014-04-19 21:31
< >
分享
最佳答案
0

slicing和slice assignment是两个不同的概念。请参考关于这个问题的讨论:

http://stackoverflow.com/questions/10623302/how-assignment-works-with-python-list-slice

收获园豆:7
adanus | 初学一级 |园豆:144 | 2014-04-21 19:28
其他回答(2)
0
x = [10, 20, 30]
print('x is {0}'.format(x))
a = x[1:3]
print('x is {0}'.format(x))
print('a is {0}'.format(a))
x[1:3] = ['o', 'k']
print('x is {0}'.format(x))
b = x[1:3]
print('b is {0}'.format(b))

其实我不会Python,我猜是这样的吧

收获园豆:1
ThreeTree | 园豆:1490 (小虾三级) | 2014-04-19 23:18
0
#如果你执行如下代码
>>> a =  [10,20,30]
>>> a[0:2] = [4,5] #该操作是赋值操作,意思是将a的前两个值赋值为4,5
>>> a
[4, 5, 30]



#如果你执行如下代码
>>> a =  [10,20,30]
>>> b = a[0:2]#这样才是切片操作,就复制了a的前两个元素
>>> b
[10, 20]
收获园豆:2
马僧 | 园豆:205 (菜鸟二级) | 2014-04-22 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册