🐍 📗 Bagian 2 (Struktur Data, OOP & Proyek) • Modul 06 100% Standar Industri & Vokasi

Struktur Data Koleksi (List, Tuple, Set, Dict)

Manipulasi mutable List (indexing, slicing, methods), immutable Tuple, himpunan unik Set, key-value mapping Dictionary, dan List Comprehension.

Target Pembelajaran:
  • Memahami tabel perbandingan karakteristik 4 struktur data Python.
  • Mengetahui perbedaan kritis antara Copy by Reference (Alias) dan Clone/Shallow Copy.
  • Menguasai operasi CRUD, Method bawaan, dan List/Dict Comprehension.
  • Memilih struktur data yang paling tepat dan efisien (Big-O Complexity).
Diagram Venn 4 Operasi Himpunan Matematika pada Tipe Data Python Set.
Gambar 6.2: Diagram Venn 4 Operasi Himpunan Matematika pada Tipe Data Python Set.

1. Tabel Ringkasan & Perbandingan 4 Koleksi

Matriks Komparasi 4 Struktur Data Koleksi Bawaan Python (List, Tuple, Set, Dict).
Gambar 6.1: Matriks Komparasi 4 Struktur Data Koleksi Bawaan Python (List, Tuple, Set, Dict).
Koleksi Sintaks Terurut (Ordered)? Bisa Diubah (Mutable)? Izin Duplikasi? Kasus Penggunaan Ideal
List [1, 2, 3] ✔️ Ya ✔️ Ya ✔️ Ya Daftar item dinamis yang sering ditambah/dihapus/diurutkan
Tuple (1, 2, 3) ✔️ Ya ❌ Tidak (Konstan) ✔️ Ya Data konstan (koordinat, setting port, return multiple values)
Set {1, 2, 3} ❌ Tidak ✔️ Ya ❌ Tidak (Otomatis Unik) Eliminasi data ganda & operasi himpunan (irisan/gabungan)
Dictionary {"a": 1} ✔️ Ya (sejak Python 3.7) ✔️ Ya ❌ Key Unik (Value boleh sama) Entitas data terstruktur (Record database, JSON payload)

2. Jebakan Kritis: Reference (Alias) vs Copy

Di Python, menulis list_b = list_a TIDAK menduplikasi data, melainkan hanya membuat dua variabel yang menunjuk ke alamat memori list yang sama!

python (bahaya_alias.py)
# ❌ SALAH: Menyalin dengan operator '=' (Kedua list saling terikat)
a = [1, 2, 3]
b = a
b.append(99)
print("a:", a)  # a ikut berubah menjadi [1, 2, 3, 99]!

# ✔️ BENAR: Menggunakan method .copy() atau slicing [:]
x = [1, 2, 3]
y = x.copy()  # atau y = x[:]
y.append(99)
print("x:", x)  # x tetap aman [1, 2, 3]
print("y:", y)  # y menjadi [1, 2, 3, 99]

3. List & Dictionary Comprehension (Teknik Pythonic)

Mekanisme Hash Table & Bucket Array untuk Akses Cepat O(1) pada Dictionary.
Gambar 6.3: Mekanisme Hash Table & Bucket Array untuk Akses Cepat O(1) pada Dictionary.

Comprehension adalah cara ringkas dan sangat cepat untuk membuat koleksi baru berdasarkan iterasi koleksi yang sudah ada.

python
# 1. List Comprehension: Filter dan Transformasi dalam 1 baris
angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
kuadrat_genap = [x**2 for x in angka if x % 2 == 0]
print("Kuadrat Genap:", kuadrat_genap)  # [4, 16, 36, 64, 100]

# 2. Dict Comprehension: Mengubah format Dictionary
harga_usd = {"laptop": 800, "mouse": 25, "keyboard": 60}
kurs_idr = 16000
harga_idr = {item: harga * kurs_idr for item, harga in harga_usd.items()}
print("Harga IDR:", harga_idr)

4. Kuis Pemahaman & Latihan

🧠 Kuis Cepat: Berapakah panjang (len) dari Set berikut?
s = {1, 1.0, "1", True}
print(len(s))
Klik untuk melihat jawaban & pembahasan
Jawaban: 2
Penjelasan: Di Python, 1 == 1.0 == True bernilai sama dan memiliki nilai hash yang sama. Sehingga 1, 1.0, dan True dianggap sebagai satu elemen duplikat yang sama. Elemen uniknya hanya ada 2 yaitu 1 (atau True) dan string "1".

Tantangan 6: Penghitung Frekuensi Kata (Word Counter)

Diberikan sebuah paragraf: teks = "python adalah bahasa yang mudah python sangat populer python bagus". Gunakan Dictionary untuk menghitung berapa kali setiap kata muncul di dalam kalimat tersebut!

Tips: Pecah string menjadi list kata dengan teks.split(), lalu lakukan iterasi untuk menambahkan count ke dictionary dengan counts[kata] = counts.get(kata, 0) + 1.
📋 Cheat Sheet: Struktur Data Bawaan Python
Cheat Sheet
Sintaks / Perintah Keterangan Fungsi
[item1, item2] List: Berurutan, mutable (bisa diubah), indeks dari 0
(item1, item2) Tuple: Berurutan, immutable (permanen tidak bisa diubah)
{"kunci": "nilai"} Dictionary: Pasangan key-value cepat berbasis hash map
{item1, item2} Set: Kumpulan elemen unik tanpa duplikasi data
[x * 2 for x in data] List Comprehension: Pembuatan list baru secara deklaratif & efisien
dict.get(key, default) Mengambil nilai dict dengan proteksi nilai default jika kunci tidak ditemukan
🛠️ Praktikum Terkait

Jobsheet 03: Struktur Data Terstruktur & CRUD

Kembangkan program manajemen data nilai siswa dengan operasi CRUD (Create, Read, Update, Delete) lengkap.

⚠️ Perangkap Pemula: IndexError List & KeyError Dictionary
Waspada Error

Mengakses indeks di luar jangkauan list atau memanggil kunci dictionary yang belum ada langsung menyebabkan aplikasi berhenti seketika.

Kode Salah (Memicu Error)
# IndexError: list index out of range
skor = [80, 90, 75]
print(skor[3]) # Error: indeks hanya 0, 1, 2

# KeyError: 'email'
siswa = {"nama": "Ali", "kelas": "X"}
print(siswa["email"]) # Crash jika kunci tidak ada
Solusi Benar & Aman
# Solusi Benar:
skor = [80, 90, 75]
if len(skor) > 3:
    print(skor[3])

siswa = {"nama": "Ali", "kelas": "X"}
print(siswa.get("email", "Belum terdaftar")) # 100% aman
Penyebab & Solusi: Indeks list Python selalu berbasis 0 (*zero-indexed*). Untuk dictionary, selalu utamakan metode .get(kunci, nilai_default) untuk menghindari crash akibat KeyError.
💡 Tips Pythonic: List Comprehension & Dictionary .get()
Standar PEP 8

Manfaatkan list comprehension untuk transformasi data dan metode .get() untuk mengakses nilai kamus dengan aman.

Kurang Pythonic (Hindari)
# Kurang Pythonic (Loop manual append & pengecekan key manual)
angka = [1, 2, 3, 4, 5]
kuadrat = []
for x in angka:
    if x % 2 == 0:
        kuadrat.append(x ** 2)

profil = {"nama": "Rian"}
if "kota" in profil:
    asal = profil["kota"]
else:
    asal = "Belum diisi"
Pythonic Way (Direkomendasikan)
# Pythonic (List Comprehension & Dict .get() default)
angka = [1, 2, 3, 4, 5]
kuadrat = [x ** 2 for x in angka if x % 2 == 0]

profil = {"nama": "Rian"}
asal = profil.get("kota", "Belum diisi")
Efisiensi Kode: List Comprehension jauh lebih cepat dan deklaratif. Metode .get(kunci, nilai_default) mencegah terjadinya KeyError tanpa memerlukan blok if-else tambahan.
🎯

Cek Pemahaman Mandiri

Uji pemahaman Anda terhadap konsep bab ini dengan feedback evaluasi instan.

2 Soal Pilihan Ganda
Q1

Manakah struktur data bawaan Python berikut yang bersifat Immutable (nilainya terkunci dan tidak dapat diubah setelah dibuat)?

💡 Pembahasan: Tuple bersifat immutable (read-only). Anda tidak dapat menambah, menghapus, atau mengubah elemen tuple setelah inisialisasi.

Q2

Bagaimana cara mengambil nilai dari dictionary profil = {"nama": "Rian"} secara aman tanpa memicu KeyError jika kuncinya tidak ada?

💡 Pembahasan: Metode .get(key, default) mengambil nilai secara aman. Jika kunci tidak ditemukan, metode ini mengembalikan nilai default tanpa menimbulkan crash KeyError.