python中深拷貝與淺拷貝的坑

2021-09-23 10:31:25 字數 918 閱讀 8763

之前遇到這樣一段**

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...