今天在用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