之前遇到這樣一段**
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
import collections
digits = datasets.load_digits()
x = digits.data
# 1 使用copy(),深拷貝
y = digits.target.copy()
# 2 不使用copy(),淺拷貝
y = digits.target
y[digits.target==9] = 1
y[digits.target!=9] = 0
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=666)
print(collections.counter(y_train))
輸出結果為下:
# 使用copy()時的輸出結果
counter()
# 不使用copy()時的輸出結果
counter()
在不使用copy()時,python中預設的是淺拷貝,即兩個變數都指向了同乙個記憶體位址
# 那麼在下面的**段中 y 與 digits.target 都指向了乙個位址(使用 x 指代)
y[digits.target==9] = 1 # 將 x 中為 9 的值都換成 1
y[digits.target!=9] = 0 # 此時 x 中所有的值已經沒有 9 了,即所有的值都換成了 0
所以,在使用了copy()之後,輸出的結果中還包含兩類 python 中的拷貝 淺拷貝與深拷貝
0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...
python中淺拷貝與深拷貝
淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...
Python中的淺拷貝與深拷貝
1.淺拷貝 情況1的例項如下 import copy a 1,2 b 3,4 c a,b 注意這裡的c就是乙個可變物件!d copy.copy c print 變數c c print print 變數d d 結果 變數c 1,2 3,4 變數d 1,2 3,4 原因分析 需要拷貝的物件c是乙個lis...