主要是介绍python中的copy模块。
copy模块包括创建复合对象(包括列表、元组、字典和用户定义对象的实例)的深浅复制的函数。
########
copy(x)
########
创建新的复合对象并通过引用复制x的成员来创建x的浅复制。更加深层次说,
它复制了对象,但对于对象中的元素,依然使用引用。
对于内置类型,此函数并不经常使用。
而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样
直接使用类型名显然比使用copy()快很多。但是它们达到的效果是一样的。
还有一点就是对于那些不可修改的对象(string, 数字, 元组),因为你不用担心修改他们。复制不复制也就没有
什么大的意义了。
另外一点,你判断对象之间是否是拷贝,可以使用is运算符来确定。
a is b -> True a与b引用的是同一个对象,不是拷贝
-> False a与b是彼此拷贝对象
例如下面的例子,eg:
(1)
>>> a = [1,2,3]
>>> b = copy.copy(a)
>>> b
[1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3]
>>> a is b
False
(2)
>>> a = [1,2,3]
>>> b = a
>>> b
[1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> b.append(6)
>>> a, b
([1, 2, 3, 4, 6], [1, 2, 3, 4, 6])
(3)
>>> a = [1,2,3]
>>> b = list(a)
>>> b
[1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3]
>>>
(4)
>>> a = [[1], ['a'], ['A']]
>>> b = copy.copy(a)
>>> print a, b
[[1], ['a'], ['A']] [[1], ['a'], ['A']]
>>> b[1].append('b')
>>> b
[[1], ['a', 'b'], ['A']]
>>> a
[[1], ['a', 'b'], ['A']]
>>> b.append([100,101])
>>> b
[[1], ['a', 'b'], ['A'], [100, 101]]
>>> a
[[1], ['a', 'b'], ['A']]
在(3)例子当中,我们可以看到a的浅复制对象b,它们是不同的对象,所以对对象的改变是不会
影响彼此的,但是这些a和b对象的元素是引用的同一个,所以a或者b更改了它的对象的元素就会影响到
另外一个的值。
如果你想完全的拷贝一个对象和一个对象的所有元素的值,只有使用下面的deepcopy()函数。
#######################
deepcopy(x[, visit])
#######################
通过创建新的复合对象并重复复制x的所有成员来创建x的深复制。
visit是一个可选的字典,目的是跟踪受访问的对象,从而检测和避免重复定义
的数据结构中的循环。
尽管通常情况下不需要,但是通过实现方法__copy__(self)和__deepcopy__(self, visit),
类就可以实现自定义的复制方法,这两个方法分别实现了浅复制和深复制操作。
__deepcopy__()方法必须使用字典visit,用来在复制过程中跟踪前面遇到的对象。对于
__deepcopy__()方法,除了将visit传到实现中包含的其他deepcopy()方法(如果有的话)之外,
没有必要在执行其他操作。
如果类实现了pickle模块所用的方法__getstate__()和__setstate__(),那么copy模块将使用
这些方法来创建副本。
,但是通过实现方法__copy__(self)和__deepcopy__(self, visit),
类就可以实现自定义的复制方法,这两个方法分别实现了浅复制和深复制操作。
__deepcopy__()方法必须使用字典visit,用来在复制过程中跟踪前面遇到的对象。对于
__deepcopy__()方法,除了将visit传到实现中包含的其他deepcopy()方法(如果有的话)之外,
没有必要在执行其他操作。
如果类实现了pickle模块所用的方法__getstate__()和__setstate__(),那么copy模块将使用
这些方法来创建副本。,但是通过实现方法__copy__(self)和__deepcopy__(self, visit),
类就可以实现自定义的复制方法,这两个方法分别实现了浅复制和深复制操作。
__deepcopy__()方法必须使用字典visit,用来在复制过程中跟踪前面遇到的对象。对于
__deepcopy__()方法,除了将visit传到实现中包含的其他deepcopy()方法(如果有的话)之外,
没有必要在执行其他操作。
如果类实现了pickle模块所用的方法__getstate__()和__setstate__(),那么copy模块将使用
这些方法来创建副本。
eg:
>>> a = [[1], ['a'], ['A']]
>>> import copy
>>> b = copy.deepcopy(a)
>>> b
[[1], ['a'], ['A']]
>>> c = copy.copy(a)
>>> c
[[1], ['a'], ['A']]
>>> a[1].append('b')
>>> a
[[1], ['a', 'b'], ['A']]
>>> b
[[1], ['a'], ['A']]
>>> c
[[1], ['a', 'b'], ['A']]
需要注意的是:
(1) copy模块用于像整数和字符串这样的简单类型,不过很少需要这么做。
(2) 这些复制函数无法与模块、类对象、函数、方法、回溯、栈帧、文件、套接字和其他类似类型同时工作。
如果不能复制对象,则会引发copy.error异常。
Atas ialah kandungan terperinci 深入了解python中的copy模块(浅复制和深复制). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Arraysinpython, terutamanya yang, arecrucialinscientificificputingputingfortheirefficiencyandversatility.1) mereka yang digunakan untuk

Anda boleh menguruskan versi python yang berbeza dengan menggunakan Pyenv, Venv dan Anaconda. 1) Gunakan pyenv untuk menguruskan pelbagai versi python: Pasang pyenv, tetapkan versi global dan tempatan. 2) Gunakan VENV untuk mewujudkan persekitaran maya untuk mengasingkan kebergantungan projek. 3) Gunakan Anaconda untuk menguruskan versi python dalam projek sains data anda. 4) Simpan sistem python untuk tugas peringkat sistem. Melalui alat dan strategi ini, anda dapat menguruskan versi Python yang berbeza untuk memastikan projek yang lancar.

Numpyarrayshaveseveraladvantagesoverstanderardpythonarrays: 1) thearemuchfasterduetoc-assedimplementation, 2) thearemorememory-efficient, antyedlargedataSets, and3) theyofferoptimized, vectorizedfuncionsformathhematicalicalicalicialisation

Kesan homogenitas tatasusunan pada prestasi adalah dwi: 1) homogenitas membolehkan pengkompil untuk mengoptimumkan akses memori dan meningkatkan prestasi; 2) tetapi mengehadkan kepelbagaian jenis, yang boleh menyebabkan ketidakcekapan. Singkatnya, memilih struktur data yang betul adalah penting.

ToCraftExecutablePythonscripts, ikutiTheseBestPractics: 1) addAshebangline (#!/Usr/bin/envpython3) tomakethescriptexecutable.2) setpermissionswithchmod xyour_script.py.3)

Numpyarraysarebetterfornumericationsoperationsandmulti-dimensialdata, whiletheArrayModuleissuitiableforbasic, ingatan-efisienArrays.1) numpyexcelsinperformanceandfunctionalityforlargedatasetsandcomplexoperations.2) thearrayModeMoremoremory-efficientModeMoremoremoremory-efficientModeMoremoremoremory-efficenceismemoremoremoremoremoremoremoremory-efficenceismemoremoremoremoremorem

NumpyarraysareBetterforheavynumericalcomputing, whilethearraymoduleismoresuitifFormemory-constrainedprojectswithsimpledatypes.1) numpyarraysofferversativilityandperformanceForlargedATAsetSandcomplexoperations.2)

ctypesallowscreatingandmanipulatingc-stylearraysinpython.1) usectypestointerwithclibrariesforperformance.2) createec-stylearraysfornumericalcomputations.3) Passarraystocfuntionsforficientsoperations.however, becautiousofmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmem


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod
