今天在用Python写决策树的时候遇到了点儿小问题:
在树分叉的时候需要对子标签赋值
书上写的是
subLabels=lebels[:]
我写的是
subLabels=labels
得到的结果不一样,很不幸是我错了;
后来验证了一下两个写法的区别,各位同学一定要注意了:
a=[0,2,3,0] b=a print b del(a[1]) print b这样写得到的结果是:
[0, 2, 3, 0]
[0, 3, 0]
切片赋值得到的结果是:
a=[0,2,3,0] b=a[:] print b del(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