1|9 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Bài 15: SỰ KHÁC NHAU VỀ TOÁN TỬ CỦA HASHABLE OBJECT & UNHASHABLE OBJECT TRONG PYTHON Xem học website để ủng hộ Kteam: Sự khác toán tử Hashable object Unhashable object Python Mọi vấn đề lỗi website làm ảnh hưởng đến bạn thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website Các bạn vui lòng phản hồi đến Fanpage How Kteam nhé! Dẫn nhập Trong trước, Kteam giới thiệu đến bạn KIỂU DỮ LIỆU TUPLE, container thuộc thể loại hashable object Python Ở Kteam nói khác tốn tử hai loại kiểu liệu Hashable Object (immutable) Unhashable Object (mutable) Python Copyright © Howkteam.com 2|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Nội dung Để đọc hiểu tốt bạn cần: Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON Xem qua CÁCH CHẠY CHƯƠNG TRÌNH PYTHON Nắm CÁCH GHI CHÚ BIẾN TRONG PYTHON KIỂU DỮ LIỆU SỐ KIỂU DỮ LIỆU CHUỖI Python KIỂU DỮ LIỆU LIST, KIỂU DỮ LIỆU TUPLE Python Bạn Kteam tìm hiểu nội dung sau Giới thiệu hàm id Toán tử phương thức Khác biệt toán tử Hash Object Unhash Object Tại có List lại cịn sinh Tuple? Hoặc sử dụng Tuple thôi, cần tới List? Giới thiệu hàm id Cú pháp: id() Như Kteam đề cập trước đây, thứ Python xoay quanh đối tượng, giá trị đối tượng Tuy để để tránh gây khó hiểu Cơng dụng: Theo định nghĩa hàm id tài liệu Python hàm trả số nguyên (int longint) Giá trị giá trị số không thay đổi suốt chương trình Trong chi tiết bổ sung CPython có nói giá trị trả hàm id địa giá trị (đối tượng) nhớ Copyright © Howkteam.com 3|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Cao siêu thế, bạn hồn tồn nghĩ đơn giản, số trả số nhà bạn Bạn đâu, số nhà bạn tương ứng >>> n = 69 >>> s = 'How KTeam' >>> lst = [1, 2] >>> tup = (3, 4) >>> id(n) 1446271792 >>> id(s) 53865712 >>> id(lst) 53838352 >>> id(tup) 53865768 >>> >>> id(123) 1446272656 >>> id('Free Education') 53865832 Kteam tiếp tục giới thiệu hàm id nói tới tốn tử so sánh Python khác Toán tử phương thức Lặp lại thêm lần nữa, thứ xoay quanh Python toàn hướng đối tượng Cả toán tử thế! >>> n = 69 >>> n + 70 >>> n 69 >>> n. add (1) # tương tự bạn n + 70 >>> n 69 Copyright © Howkteam.com 4|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> n. sub (9) # tương tự n - 60 >>> n. mul (2) # tương tự n * 138 >>> n. radd (1) # tương tự + n 70 >>> n. rsub (9) # tương tự - n -60 >>> n. neg () # tương tự -n -69 Mỗi toán tử đối tượng có tốn tử kèm Khác biệt toán tử Hash Object Unhash Object Vấn đề này, khác biệt toán tử hash object unhash object Kteam lấy ví dụ so sánh đơn giản khác biệt việc s = s + i s += i Hãy xem xét đoạn code đây, Kteam xét hash object chuỗi: >>> s_1 = 'HowKteam' >>> s_2 = 'Free Education' >>> id(s_1) 53866032 >>> id(s_2) 53865712 >>> s_1 = s_1 + ' Python' >>> s_2 += ' Python' >>> id(s_1) # có thay đổi 53866152 >>> id(s_2) # có thay đổi 23088304 >>> s_1 'HowKteam Python' Copyright © Howkteam.com 5|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> s_2 'Free Education Python' Ta thấy, toán tử = + khơng có khác biệt so với += Giờ ta xét tới unhash object >>> lst_1 = [1, 2] >>> lst_2 = [3, 4] >>> id(lst_1) 53839752 >>> id(lst_2) 53864048 >>> lst_1 = lst_1 + [0] >>> lst_2 += [0] >>> id(lst_1) # có thay đổi 53864088 >>> id(lst_2) # khơng có thay đổi 53864048 >>> lst_1 [1, 2, 0] >>> lst_2 [3, 4, 0] Đã có khác biệt, thử với unhash object Tại lại vậy? Đó bạn làm cách Tức có nghĩa bạn vừa gán lại giá trị cho biến lst Nói cách khác, bạn đưa lst tới địa khác >>> lst = [1, 2] >>> lst = lst + [3] >>> lst [1, 2, 3] Copyright © Howkteam.com 6|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Cịn bạn làm >>> lst = [1, 2] >>> lst += [3] >>> lst [1, 2, 3] Thì không vậy, bạn gián tiếp gọi phương thức >>> lst = [1, 2] >>> id(lst) 53839752 >>> lst. iadd ([3]) [1, 2, 3] >>> id(lst) 53839752 >>> lst [1, 2, 3] Vậy sao, hash object lại khơng vậy? Là hash object khơng có phương thức iadd, hay imul unhash object Thế nên, bạn dùng toán tử +=, Python làm tương tự bạn dùng cách gán giá trị Vì hash object lại khơng có phương thức iadd, imul? Khi bạn khởi tạo giá trị, lưu nhớ máy tính Với hash object, bạn thay đổi nội dung Do đó, Python xin đủ khoảng trống để lưu trữ liệu bạn, không nhiều khơng Giúp khơng hoang phí nhớ bạn Thế nên, bạn cộng thêm thứ đó, Python khơng biết nhét thứ bạn muốn cộng vào chỗ Nên đành gói chỗ đó, tìm chỗ thống có đủ khoảng trống Cịn với unhash object Là đối tượng bạn thay đổi nội dung, thế, Python xin dư nhớ để chừa chỗ cho giá trị bạn thêm vào Trong trước, Kteam đề cập đến việc Tuple Copyright © Howkteam.com 7|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM chiếm dung lượng List Tuple hash object (bạn tham khảo chi tiết KIỂU DỮ LIỆU TUPLE) Tại có List lại cịn sinh Tuple? Hoặc sử dụng Tuple thơi, cần tới List? Đáng lẽ, Kteam nói vấn đề trước, muốn hiểu hash object với unhash object nên để tới Bạn dễ dàng nhận thấy, việc ta thay đổi giá trị Tuple, không thiết phải trực tiếp List >>> lst = [1, 2] >>> lst.append(3) >>> lst [1, 2, 3] >>> tup = (1, 2) >>> tup += (3,) >>> tup (1, 2, 3) Các bạn thấy, khơng khác Ta tạo hàm thay đổi nội dung Tuple cách slicing Đã List lại nặng việc chiếm nhiều dung lương Tuple, truy xuất chậm Tuple Việc khiến cịn trọng dụng? Vì bạn thay đổi Tuple cách trên, Python phải vòng vòng nhớ bạn tìm xem chỗ trống, phù hợp để chứa Tuple bạn không, với List khơng Do đó, bạn phải biết liệu bạn dạng liệu nào, có cần phải thay đổi khơng Dựa vào đó, để chọn kiểu liệu phù hợp cho mình, tối ưu hóa dung lượng sử dụng, thời gian truy xuất Copyright © Howkteam.com 8|9 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Củng cố học Đáp án trước Bạn tìm thấy câu hỏi phần CÂU HỎI CỦNG CỐ KIỂU DỮ LIỆU TUPLE TRONG PYTHON Chỉ có d cách khởi tạo Bạn hiểu khái niệm biết tới Unpacking Packing argument Kteam giới thiệu tương lai c Nếu bạn thắc mắc có lỗi Trong ví dụ phần “Có phải Tuple ln hash object?” lại khơng có lỗi? Lí ví dụ phần “Có phải Tuple ln hash object?” Việc thay đổi nội dung List Tuple Python làm việc với List Khơng liên quan đến Tuple chứa Riêng câu hỏi này, Python làm Đưa phần tử tup[2] lên TOS (Top of stack) Gán TOS (chính List [3, 4]) việc cộng thêm cho List List [50, 60] Suy ra, List [3, 4, 50, 60] Sau đó, Python gán lại tup[2] = TOS Và dĩ nhiên bạn biết, Tuple làm Có thể bạn chưa nắm kiến thức này, bạn thấy khơng khó theo dõi phần hàm id đầu Kết luận Bài viết cho bạn biết cách hoạt động toán tử Python vài khác biệt Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM 9|9 Ở sau, Kteam nói kiểu liệu nữa, KIỂU DỮ LIỆU SET Python Cảm ơn bạn theo dõi viết Hãy để lại bình luận góp ý để phát triển viết tốt Đừng quên “Luyện tập – Thử thách – Khơng ngại khó” Copyright © Howkteam.com ... -n -69 Mỗi tốn tử đối tượng có tốn tử kèm Khác biệt toán tử Hash Object Unhash Object Vấn đề này, khác biệt toán tử hash object unhash object Kteam lấy ví dụ so sánh đơn giản khác biệt việc s... tiếp tục giới thiệu hàm id nói tới toán tử so sánh Python khác Toán tử phương thức Lặp lại thêm lần nữa, thứ xoay quanh Python toàn hướng đối tượng Cả toán tử thế! >>> n = 69 >>> n + 70 >>> n... DỮ LIỆU CHUỖI Python KIỂU DỮ LIỆU LIST, KIỂU DỮ LIỆU TUPLE Python Bạn Kteam tìm hiểu nội dung sau Giới thiệu hàm id Toán tử phương thức Khác biệt toán tử Hash Object Unhash Object Tại