Tutorial Python untuk bukan pengatur cara/Tambahan tentang List: Perbezaan antara semakan

Kandungan dihapus Kandungan ditambah
Algazel (bincang | sumb.)
k kemas
Algazel (bincang | sumb.)
kembang terjemahan
Baris 108:
Fungsi <code>dapatkan_tebal()</code> mengambil senarai yang dipisahkan kepada perkataan dan token. Token yang dicarinya ialah <nowiki><B></nowiki> yang memulakan teks tebal dan <nowiki></B></nowiki> yang mengakhiri teks tebal. Fungsi <code>dapatkan_tebal()</code> menggelintar dan mencari token-token permulaan dan pengakhir.
 
Ciri berikut senarai ialah ciri bagi menalin sesebuah senarai. Jika anda mencuba sesuatu yang mudah seperti ini:
The next feature of lists is copying them. If you try something simple like:
 
>>> '''a = [1, 2, 3]'''
Baris 120:
[1, 10, 3]
 
Keputusan ini mungkin memeranjatkan kerana pengubahsuaian pada <code>b</code> menghasilkan perubahan pada <code>a</code> sekali. Apa yang terjadi ialah kenyataan <code>b = a</code> membuat <code>b</code> sebagai ''rujukan'' bagi <code>a</code>.
This probably looks surprising since a modification to <code>b</code>
 
resulted in <code>a</code> being changed as well. What happened is that the
Ini bermakna <code>b</code> boleh difikirkan sebagai satu lagi nama buat <code>a</code>. Justeru, apa jua perubahan yang dilakukan pada <code>b</code> juga mengubah <code>a</code>. Walau bagaimanapun, ada juga umpukan yang tidak membuat dua nama bagi satu senarai:
statement <code>b = a</code> makes <code>b</code> a ''reference'' to <code>a</code>.
This means that <code>b</code> can be thought of as another name for <code>a</code>.
Hence any modification to <code>b</code> changes <code>a</code> as well. However
some assignments don't create two names for one list:
 
>>> '''a = [1, 2, 3]'''
Baris 139 ⟶ 136:
[1, 2, 3, 1, 2, 3]
 
Dalam kes ini <code>b</code> bukan rujukan kepada <code>a</code> kerana ungkapan <code>a * 2</code> mewujudkan sebuah senarai baru. Kemudian kenyataan <code>b = a * 2</code> memberi <code>b</code> sebuah rujukan kepada <code>a * 2</code> dan tidak kepada <code>a</code>. Semua operasi umpukan mewujudkan rujukan. Apabila anda menggunakan senarai sebagai sebuah argumen kepada sebuah fungsi, anda juga mewujudkan sebuah rujukan. Dalam kebanyakan masa anda tidak perlu risau tentang hakikat yang anda memcipta rujukan dan bukan salinan. Namun, apabila anda perlu membuat perubahan pada satu senarai tanpa mengubah nama lain senarai tersebut, anda harus memastikan yang anda telah membuat sebuah salinan.
In this case <code>b</code> is not a reference to <code>a</code> since the
expression <code>a * 2</code> creates a new list. Then the statement
<code>b = a * 2</code> gives <code>b</code> a reference to <code>a * 2</code> rather than a
reference to <code>a</code>. All assignment operations create a reference.
When you pass a list as an argument to a function you create a
reference as well. Most of the time you don't have to worry about
creating references rather than copies. However when you need to make
modifications to one list without changing another name of the list
you have to make sure that you have actually created a copy.
 
Terdapat beberapa cara untuk membuat salinan sebuah senarai. Yang paling mudah ialah penghirisan oleh sebab operasi ini sentiasa akan membuat senarai baharu mahupun bahagian yang diris itu hanya sebahagian daripada sebuah senarai:
There are several ways to make a copy of a list. The simplest that
works most of the time is the slice operator since it always makes a
new list even if it is a slice of a whole list:
 
>>> '''a = [1, 2, 3]'''
Baris 161 ⟶ 148:
[1, 10, 3]
 
Membuat hirisan <code>[:]</code> akan mencipta sebuah salinan baru sesebuah senarai. Walau bagaimanpun, ia hanya akan membuat salinan senarai luaran. Mana-mana subsenarai measih kekal menjadi rujukan kepada subsenarai dalam senarai asal. Jadi, jika sesebuah senarai itu mengandungi sebuah lagi senarai, senarai dalaman ini juga perlu disalin sekali. Anda boleh melakukan itu secara insani, akan tetapi Python mempunyai sebuah modul yang dapat melakukannya. Anda boleh menggunakan fungsi <code>deepcopy</code> daripada modul <code>copy</code>:
Taking the slice <code>[:]</code> creates a new copy of the list. However it
only copies the outer list. Any sublist inside is still a references
to the sublist in the original list. Therefore, when the list
contains lists, the inner lists have to be copied as well. You could
do that manually but Python already contains a module to do it. You
use the <code>deepcopy</code> function of the <code>copy</code> module:
 
>>> '''import copy'''