Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Penghirisan Senarai Python Mencipta Salinan?

Adakah Penghirisan Senarai Python Mencipta Salinan?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 03:04:02618semak imbas

 Does Python's List Slicing Create Copies?

Menghiris Senarai dalam Python Tanpa Menyalin: Penerokaan

Walaupun menghiris senarai mungkin kelihatan seperti mencipta salinan baharu, kebenaran yang mendasarinya adalah agak berbeza. Mekanisme penghirisan Python mengekalkan rujukan kepada elemen senarai, dan bukannya menduplikasinya. Tingkah laku ini digunakan pada kedua-dua nilai tidak berubah dan boleh berubah.

Menguji Nilai Kekal dan Boleh berubah

Pertimbangkan senarai yang mengandungi objek integer:

a = [1000 + 1, 1000 + 1, 1000 + 1]

Walaupun mempunyai nilai yang sama, setiap integer adalah objek berbeza dengan unik ID:

map(id, a)
[140502922988976, 140502922988952, 140502922988928]

Menghiris senarai:

b = a[1:3]

mendedahkan bahawa ID objek dalam hirisan adalah sama dengan yang ada dalam senarai asal. Tiada salinan telah dibuat.

Begitu juga, nilai boleh ubah seperti kamus berkelakuan dengan cara yang sama:

a = [{0: 'zero', 1: 'one'}, ['foo', 'bar']]
map(id, a)
[4380777000, 4380712040]

map(id, a[1:]
... )
[4380712040]

Minimal Overhead Memori

Semasa rujukan objek disalin semasa menghiris, saiznya kekal malar (8 bait pada mesin 64-bit). Selain itu, setiap senarai mempunyai overhed 72 bait. Overhed ini meningkat dengan setiap keping yang dibuat:

for i in range(len(a)):
    x = a[:i]
    print('len: {}'.format(len(x)))
    print('size: {}'.format(sys.getsizeof(x)))

Walaupun overhed, menghiris senarai masih merupakan pendekatan yang lebih cekap berbanding dengan mencipta senarai baharu sepenuhnya.

Views and Numpy Arrays< ;/h3>

Python tidak menawarkan cara asli untuk mencipta paparan senarai. Walau bagaimanapun, tatasusunan numpy menyediakan penyelesaian untuk menjimatkan memori dengan berkongsi memori antara kepingan dan tatasusunan asal. Pengubahsuaian yang dibuat pada tatasusunan asal ditunjukkan dalam kepingan:

import numpy

a = numpy.arange(3)
b = a[1:3]

a[2] = 1001
b  # Output: array([   1, 1001])

Walau bagaimanapun, menggunakan pandangan memerlukan pertimbangan yang teliti untuk mengelakkan pengubahsuaian yang tidak diingini.

Atas ialah kandungan terperinci Adakah Penghirisan Senarai Python Mencipta Salinan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn