Bộ có thể thay đổi hoặc không thay đổi trong python

Bộ là đối tượng kiểu dữ liệu có thể thay đổi chứa tập hợp các phần tử. Nó là một bộ sưu tập không có thứ tự và chỉ chứa các đối tượng duy nhất trong đó. Là một cấu trúc dữ liệu không có thứ tự, nó sẽ không ghi lại vị trí phần tử hoặc thứ tự các phần tử được chèn vào nó

Tên khác của bộ là từ điển không có giá trị và chúng được triển khai nội bộ dưới dạng từ điển. Trên thực tế, bạn có thể tưởng tượng các phần tử của tập hợp là các khóa của từ điển và vì các khóa từ điển không thể có các đối tượng dữ liệu có thể thay đổi. Yêu cầu tương tự cũng áp dụng cho các phần tử thiết lập. Vui lòng tham khảo bài đăng khác của tôi để hiểu thêm về các khóa từ điển — https. //Trung bình. com/analytics-vidhya/dictionary-walk-through-python-74274b2baf71

Mặc dù các tập hợp có thể thay đổi nhưng nó chỉ có thể có các phần tử bất biến. Nó sẽ không cho phép bất kỳ đối tượng có thể thay đổi nào là một phần tử của nó. Điều này có nghĩa là các bộ không thể có danh sách, từ điển và chính bộ vì chúng là cấu trúc dữ liệu có thể thay đổi. Dưới đây là một số ví dụ mô tả tương tự

Ví dụ hiển thị loại phần tử Bộ có thể chứa

liên kết github. https. //github. com/bvvkrishna/Deep-Dive-into-Python/blob/master/Set%20Applications. ipynb

Python hạn chế thêm danh sách vào một tập hợp

Python hạn chế thêm danh sách vào một tập hợp vì 'danh sách' là loại không thể xóa được. Để hiểu rõ hơn về điều này, trước tiên hãy nói về giá trị băm và bảng băm

Giá trị băm

Băm là một giá trị duy nhất được gán cho một đối tượng bằng hàm băm. Nếu hai đối tượng bằng nhau thì hàm băm của chúng sẽ giống nhau và ngược lại. Bạn có thể kiểm tra hàm băm của bất kỳ đối tượng nào trong python bằng cách

Bảng băm

Bảng băm là một cấu trúc dữ liệu để lưu trữ một cặp khóa-giá trị. Đối với bất kỳ cặp khóa-giá trị nào, hashtable sử dụng hàm băm để tính toán hàm băm của khóa và sử dụng giá trị băm đó làm địa chỉ bộ nhớ để lưu trữ dữ liệu. Trong quá trình tra cứu dữ liệu bằng khóa, khóa được băm và giá trị băm kết quả cho biết vị trí lưu trữ dữ liệu tương ứng

Lưu trữ dữ liệu trong hashtable bằng cách tính toán hàm băm của khóa

Một tập hợp sử dụng bảng băm làm cấu trúc dữ liệu cơ bản của nó và lưu trữ các phần tử mà chúng tôi thêm vào tập hợp dưới dạng một cặp khóa-giá trị, với khóa là phần tử của tập hợp và giá trị là một số giá trị giả hoặc giá trị rỗng. Hàm băm của khóa, là phần tử được thêm vào tập hợp, được tính toán và dữ liệu được lưu trữ tại địa chỉ bộ nhớ này trong bảng băm

Chỉ các đối tượng bất biến mới có thể được băm

Python có hai loại kiểu dữ liệu. có thể thay đổi và bất biến. Một đối tượng có thể thay đổi có thể thay đổi nội dung của nó trong khi các đối tượng bất biến không thể

loại có thể thay đổi. danh sách, dict, thiết lập, mảng byte

loại bất biến. int, float, phức tạp, chuỗi, tuple, bộ đóng băng, byte

Trong python, có một điều kiện để một đối tượng có giá trị băm

Đối với một đối tượng có thể băm được, nó phải là bất biến

Một danh sách có thể thay đổi, không thể được băm

Điều này là do, một khi hàm băm của một đối tượng được tính toán, nó sẽ giữ nguyên trong suốt thời gian tồn tại của nó. Nhưng nếu giá trị của một đối tượng có thể thay đổi, nghĩa là nếu nó có thể thay đổi, hàm băm sẽ thay đổi khi giá trị thay đổi và sẽ gây ra các hành vi không mong muốn. Do đó, python chỉ cho phép giá trị băm cho các đối tượng bất biến

Hành vi bất ngờ là gì nếu các đối tượng có thể thay đổi có thể được băm và thêm vào một tập hợp?

Giả sử chúng ta thêm một danh sách vào một tập hợp và giả sử rằng chúng ta có thể tính hàm băm của danh sách có thể thay đổi này. Sơ đồ dưới đây mô tả cách sửa đổi danh sách, được thêm vào tập hợp, sẽ làm gián đoạn việc triển khai bảng băm

Do đó, nếu các giá trị bên trong một tập hợp có thể thay đổi, thì sẽ có sự không khớp trong địa chỉ vị trí bộ nhớ và hàm băm khi đối tượng được sửa đổi hoặc cập nhật. Do đó, trong python, chỉ các đối tượng bất biến, như số nguyên, chuỗi hoặc bộ dữ liệu, mới có thể được băm và có thể được sử dụng làm phần tử trong một tập hợp hoặc làm khóa của từ điển mặc dù bản thân tập hợp hoặc từ điển đó có thể thay đổi

Điều gì xảy ra trong Java?

Mặc dù Java sử dụng các hàm băm bên trong để lưu trữ một HashSet, nhưng việc triển khai cốt lõi về cơ bản giống như trong Python. Nhưng như trong trường hợp của Python, Java không hạn chế việc thêm các đối tượng có thể thay đổi vào một tập hợp và các đối tượng có thể thay đổi cũng có thể có giá trị băm

Nhưng nếu bạn thêm một đối tượng có thể thay đổi vào một tập hợp và nếu đối tượng thay đổi trạng thái của nó, thì việc triển khai tập hợp có thể gây ra một số hành vi khó hiểu. Đối tượng sẽ vẫn hiện diện nếu bạn lặp qua tập hợp, nhưng nó có thể không hiện diện nếu bạn truy vấn tập hợp bằng phương thức chứa(). Đoạn mã dưới đây chứng minh điều này

Khi thêm các đối tượng của một lớp vào một tập hợp, nó sẽ có tác dụng phụ tương tự nếu bạn thay đổi giá trị của bất kỳ trường nào trong lớp, điều này góp phần vào hashCode() của lớp đó (Điều này sẽ không gặp phải trong trường hợp khi . Do đó, trong Java, việc xóa và chèn lại các phần tử trong một tập hợp sau khi sửa đổi luôn an toàn hơn, nếu phần tử đã sửa đổi đóng góp vào hashCode() của nó

Set có phải là kiểu dữ liệu không thay đổi không?

Danh sách, Bộ và Từ điển trong Python là ví dụ về một số loại dữ liệu có thể thay đổi trong Python. Các kiểu dữ liệu không thể thay đổi là những kiểu dữ liệu có giá trị không thể sửa đổi sau khi chúng được tạo. Ví dụ về các kiểu dữ liệu bất biến là int, str, bool, float, tuple, v.v.

Các bộ có thể thay đổi được không?

Bộ là tập hợp các mục không có thứ tự. Mỗi phần tử tập hợp là duy nhất (không trùng lặp) và phải bất biến ( không thể thay đổi ).

Cái nào có thể thay đổi và không thay đổi trong Python?

Mutable là một cách nói hoa mỹ rằng trạng thái bên trong của đối tượng bị thay đổi/biến đổi. Vì vậy, định nghĩa đơn giản nhất là. Một đối tượng có thể thay đổi trạng thái bên trong là có thể thay đổi. Mặt khác, immutable không cho phép bất kỳ thay đổi nào trong đối tượng sau khi nó được tạo .

Bất biến trong Python là gì?

Đối tượng bất biến. Đây là các loại dựng sẵn như int, float, bool, string, unicode, tuple. Nói một cách đơn giản, một đối tượng bất biến không thể thay đổi sau khi nó được tạo