Python切片赋值

来源:互联网 发布:ubuntu 命令行 deb 编辑:程序博客网 时间:2024/06/06 01:03

今天在用Python写决策树的时候遇到了点儿小问题:

在树分叉的时候需要对子标签赋值

书上写的是

subLabels=lebels[:]

我写的是

subLabels=labels

得到的结果不一样,很不幸是我错了;

后来验证了一下两个写法的区别,各位同学一定要注意了:

a=[0,2,3,0]b=aprint bdel(a[1])print b
这样写得到的结果是:

[0, 2, 3, 0]
[0, 3, 0]


切片赋值得到的结果是:

a=[0,2,3,0]b=a[:]print bdel(a[1])print b
[0, 2, 3, 0][0, 2, 3, 0]

是不一样吧?

切片赋值,得到的与原变量无关,是两个不同的对象;直接赋值,引用的是同一个对象。这里可以对他们的id做一下输出就会发现问题所在

直接赋值得到的id是一样的:

[0, 2, 3, 0]
[0, 3, 0]
id(b): 83565448       id(a): 83565448

切片赋值就变成了这样:

[0, 2, 3, 0]
[0, 2, 3, 0]
id(b): 83250504       id(a): 83250056