Python bất biến

Các đối tượng có thể tự thay đổi được gọi là Đối tượng có thể thay đổi trong khi mặt khác, những đối tượng không thể tự thay đổi được gọi là Đối tượng không thể thay đổi

Giới thiệu về Mutable và Immutable trong Python

Mọi thứ trong python đều được coi là một đối tượng. Khi chúng ta khởi tạo một đối tượng, một id duy nhất được gán cho nó. Chúng ta không thể thay đổi loại đối tượng nhưng chúng ta có thể thay đổi giá trị của đối tượng. Ví dụ chúng ta đặt biến a là danh sách, bây giờ chúng ta không thể thay đổi biến a từ danh sách thành bộ/từ điển nhưng chúng ta có thể thay đổi giá trị trong danh sách đó

Vì vậy, có hai loại đối tượng trong python. Một, những đối tượng có thể thay đổi trạng thái bên trong của chúng (dữ liệu/nội dung bên trong những đối tượng đó) i. e. chúng có thể được thay đổi với sự trợ giúp của các hàm hoặc phương thức được xác định trước trong khi mặt khác, những đối tượng đó không thể thay đổi trạng thái bên trong của chúng (dữ liệu/nội dung bên trong các đối tượng)

Nói rộng ra các đối tượng python được chia thành hai loại

  • Đối tượng có thể thay đổi
  • Đối tượng bất biến

Các đối tượng có thể thay đổi trong Python

Có thể thay đổi có nghĩa là những đối tượng có thể tự thay đổi sau khi chúng ta khởi tạo chúng. Có một số phương thức và chức năng mà chúng ta có thể thay đổi các đối tượng có thể thay đổi. Bằng cách sử dụng các phương thức và chức năng đó, các đối tượng ban đầu được sửa đổi

Trong khi thực hiện bất kỳ thay đổi nào đối với các đối tượng có thể thay đổi, bộ nhớ lưu trữ các đối tượng đó vẫn giữ nguyên. Điều này được giải thích trong các phần khác nhau Đối tượng có thể thay đổi đọc để biết thêm

Bấm vào đây, để tìm hiểu thêm về Đối tượng trong Python

Ví dụ về các đối tượng có thể thay đổi

Đối tượng bất biến trong Python

Immutable có nghĩa là những đối tượng không thể tự thay đổi sau khi chúng ta khởi tạo chúng. Không có phương thức và chức năng nào có thể được sử dụng để sửa đổi các đối tượng bất biến đó. Chúng ta phải chuyển đổi các đối tượng bất biến đó thành có thể thay đổi một lần và sau đó chúng ta có thể sửa đổi các đối tượng đó

Trong khi thực hiện bất kỳ thay đổi nào đối với các đối tượng bất biến, bộ nhớ lưu trữ các đối tượng này trong quá trình khởi tạo sẽ được cập nhật. Điều này được giải thích trong các phần khác nhau Đối tượng bất biến đọc để biết thêm

Ví dụ về các đối tượng bất biến

  • int
  • trôi nổi
  • Chuỗi
  • Tuple
  • Bộ đông lạnh

Ví dụ về các đối tượng có thể thay đổi trong Python

Danh sách

Về bản chất, danh sách có thể thay đổi, điều đó có nghĩa là chúng ta có thể thay đổi các mục của danh sách bằng cách sử dụng toán tử gán hoặc sử dụng toán tử lập chỉ mục

Hãy xem ví dụ cho điều đó

Thí dụ

list1 = ['hi','bye',52,True,2.3]

print(list1)

list1[1]='see u later'

print(list1)

đầu ra

  • ['xin chào', 'tạm biệt', 52, Đúng, 2. 3]
  • ['xin chào', 'hẹn gặp lại', 52, Đúng, 2. 3]

Giải trình

  • Chúng tôi đã tạo một danh sách và thêm một số giá trị vào đó
  • Sau đó, chúng tôi sử dụng toán tử gán trong Python để gán giá trị tại chỉ mục đầu tiên
  • Sau đó, chúng tôi in danh sách cập nhật (trong danh sách gốc) và chúng tôi thấy rằng giá trị tại chỉ mục 1 đã thay đổi
  • Điều này cho thấy rằng Danh sách có thể thay đổi trong tự nhiên

Từ điển

Về bản chất, từ điển có thể thay đổi, vì vậy chúng tôi có thể cập nhật từ điển bằng cách sử dụng chức năng sẵn có (cập nhật)

Hãy xem một ví dụ cho điều đó

Thí dụ

dict1 = {1:'google',2:'firefox',3:'opera'}

print(dict1)

updateDict = {4:'Ms Edge'}

dict1.update(updateDict)

print(dict1)

đầu ra

  • {1. 'google', 2. 'firefox', 3. 'nhạc kịch'}
  • {1. 'google', 2. 'firefox', 3. 'nhạc kịch', 4. 'Bà Edge'}

Giải trình

  • Chúng tôi đã tạo một từ điển và thêm một số giá trị vào đó
  • Chúng tôi tạo một biến và thêm một khóa. cặp giá trị với nó
  • Sau đó, Ta sử dụng chức năng cập nhật để thêm khóa vừa tạo. cặp giá trị vào từ điển
  • Cuối cùng, chúng tôi in từ điển và thấy rằng khóa mới được tạo. cặp giá trị được thêm vào danh sách ban đầu
  • Điều này cho thấy rằng Từ điển có thể thay đổi trong tự nhiên

Bố trí

Về bản chất, tập hợp có thể thay đổi, vì vậy chúng ta có thể cập nhật tập hợp bằng cách sử dụng hàm sẵn có (cập nhật)

Hãy xem ví dụ cho điều đó

Thí dụ

set1 = {1,2}

print(set1)

updateSet = {'a','b',1}

set1.update(updateSet)

print(set1)

đầu ra

Giải trình

  • Chúng tôi đã tạo một tập hợp và thêm một số giá trị vào đó
  • Chúng tôi tạo một biến và thêm một số giá trị đã đặt cho nó
  • Sau đó, chúng tôi sử dụng chức năng cập nhật để thêm tập hợp mới được tạo vào tập hợp ban đầu
  • Cuối cùng, chúng tôi in tập hợp và thấy rằng tập hợp mới được tạo sẽ được thêm vào tập hợp ban đầu
  • Điều này cho thấy rằng Bộ có thể thay đổi về bản chất

Ví dụ về các đối tượng bất biến trong Python

int

int về bản chất là bất biến, vì vậy chúng tôi không thể thay đổi hoặc cập nhật kiểu dữ liệu int

Như chúng ta đã đọc trước đó, các đối tượng bất biến đó sẽ thay đổi địa chỉ bộ nhớ của chúng khi chúng được cập nhật

Hãy xem ví dụ về điều đó

Thí dụ

intVariable = 20
print('memory address before updating: ', id(a))

# Updating an immutable object by assigning a new value to it.

# It will now refer to the new object and defer the previously created object.

intVariable=30
print('memory address after updating: ', id(a))

đầu ra

  • địa chỉ bộ nhớ trước khi cập nhật. 9789600
  • địa chỉ bộ nhớ sau khi cập nhật. 9789920

Giải trình

  • Chúng tôi đã gán một số giá trị số nguyên cho một biến
  • Sau đó, chúng tôi in id của biến đó
  • Sau khi update biến ta in lại id của biến đó
  • Đầu ra cho cả hai lần là khác nhau
  • Điều này ngụ ý rằng các số nguyên về bản chất là bất biến vì một đối tượng khác của số nguyên đã được tạo và được tham chiếu khi cập nhật giá trị của nó

trôi nổi

float về bản chất là bất biến, vì vậy chúng ta không thể thay đổi hoặc cập nhật kiểu dữ liệu float

Như chúng ta đã đọc trước đó, các đối tượng bất biến đó sẽ thay đổi địa chỉ bộ nhớ của chúng khi chúng được cập nhật

Hãy xem ví dụ về điều đó

Thí dụ

floatVariable = 2.5
print('memory address before updating: ', id(floatVariable))

# Updating an immutable object by assigning a new value to it.

# It will now refer to the new object and defer the previously created object.

floatVariable = 10.0
print('memory address after updating: ', id(floatVariable))

đầu ra

  • địa chỉ bộ nhớ trước khi cập nhật. 140664386693680
  • địa chỉ bộ nhớ sau khi cập nhật. 140664386693712

Giải trình

  • Chúng tôi đã gán một số giá trị float cho một biến
  • Sau đó, chúng tôi in id của biến đó
  • Sau khi update biến ta in lại id của biến đó
  • Đầu ra cho cả hai lần là khác nhau
  • Điều này ngụ ý rằng các số float về bản chất là không thay đổi vì một đối tượng khác của số nguyên đã được tạo và được tham chiếu khi cập nhật giá trị của nó

Chuỗi

Các chuỗi có bản chất là bất biến, vì vậy chúng tôi không thể nối thêm hoặc cập nhật bất kỳ thứ gì trong chuỗi. Trong khi cập nhật bất kỳ phần nào của chuỗi, chúng tôi đã gặp một số lỗi như chuỗi không thể thay đổi về bản chất

Hãy xem một ví dụ về điều đó

Thí dụ

stringVariable = 'hello geeks'

stringVariable[0] = 'bye'

print(stringVariable)

đầu ra

  • stringVariable[0] = 'tạm biệt'
  • LoạiLỗi. đối tượng 'str' không hỗ trợ gán mục

Giải trình

  • Chúng tôi đã gán một số giá trị chuỗi cho một biến
  • Sau đó, chúng tôi cố gắng cập nhật chuỗi bằng toán tử gán mục
  • Sau khi update biến thì khi in ra chuỗi nó báo lỗi item assignment not supports
  • Điều này ngụ ý rằng các chuỗi là bất biến trong tự nhiên

Tuple

Các bộ dữ liệu cũng không thay đổi về bản chất, vì vậy chúng tôi không thể thêm hoặc cập nhật bất kỳ thứ gì trong các bộ dữ liệu. Trong khi cập nhật bất kỳ mục nào trong bộ dữ liệu, chúng tôi đã gặp một số lỗi như chuỗi không thể thay đổi về bản chất

Hãy xem ví dụ về điều đó

Thí dụ

tupVariable = (1,2,3)

tupVariable[1] = 5

print(tupVariable)

đầu ra

  • tupVariable[1] = 5
  • LoạiLỗi. đối tượng 'tuple' không hỗ trợ gán mục

Giải trình

  • Chúng tôi đã gán một số giá trị cho tuple
  • Sau đó, chúng tôi cố gắng cập nhật bộ dữ liệu bằng cách sử dụng toán tử gán mục
  • Sau khi update biến thì khi in ra chuỗi nó báo lỗi item assignment not supports
  • Điều này ngụ ý rằng các bộ dữ liệu là bất biến trong tự nhiên

Đông LạnhBộ

Frozensets giống như set trong python nhưng bản chất chúng là bất biến. Mặc dù các phần tử trong tập hợp có thể được sửa đổi bất kỳ lúc nào, nhưng điều này không thể được thực hiện trong bộ đóng băng. Vì vậy, chúng tôi không thể thêm hoặc cập nhật bất kỳ thứ gì trong FrozenSet. Trong khi cập nhật bất kỳ mục nào trong FrozenSet, chúng tôi đã gặp một số lỗi như FrozenSets không thể thay đổi về bản chất

Hãy xem ví dụ về điều đó

Thí dụ

nu = (1, 2, 3, 4, 5, 6, 7, 7, 8, 9)

fnum = frozenset(nu)

print("frozenset Object is : ", fnum)

fnum[1] = 10

print(fnum)

đầu ra

  • Đối tượng Frozenset bây giờ là. bộ đóng băng({1, 2, 3, 4, 5, 6, 7, 8, 9})
  • fnum[1] = 10
  • LoạiLỗi. đối tượng Frozenset không hỗ trợ gán vật phẩm

Giải trình

  • Chúng tôi đã gán một số giá trị cho tuple
  • Sau đó, chúng tôi chuyển đổi bộ dữ liệu sang bộ đóng băng bằng cách sử dụng hàm Frozenset
  • Sau đó, chúng tôi cố gắng cập nhật bộ đóng băng bằng cách sử dụng toán tử gán mục
  • Sau khi update biến thì khi in ra chuỗi nó báo lỗi item assignment not supports
  • Điều này cho thấy rằng các bộ đóng băng là bất biến trong tự nhiên

Ví dụ về các đối tượng có thể thay đổi và không thể thay đổi

Giả sử chúng ta phải tạo một ứng dụng để lưu trữ thông tin liên quan đến các môn học mà sinh viên đã chọn. Trong khi tạo một ứng dụng như vậy, chúng ta phải nhớ rằng chúng ta phải sử dụng những đối tượng có thể được sửa đổi sau này theo yêu cầu

Vì vậy, đối với ứng dụng này, chúng ta phải sử dụng các đối tượng Có thể thay đổi như Danh sách thay vì Đối tượng bất biến như tuple để lưu trữ tên của tất cả các môn học được chọn bởi một học sinh

Nếu chúng ta sử dụng bộ dữ liệu (đối tượng bất biến) ở đây, chúng ta không thể thay đổi lại bộ dữ liệu. Nếu chúng ta phải cập nhật danh sách môn học của bất kỳ sinh viên nào thì chúng ta cần tạo một bộ dữ liệu mới, việc này chiếm nhiều bộ nhớ và không phải là một cách thực hành tốt

Nhưng, nếu chúng ta sử dụng danh sách (đối tượng có thể thay đổi) ở đây, thì chúng ta có một hàm như append (để thêm dữ liệu), pop (để xóa dữ liệu), toán tử gán mục và nhiều hàm khác để cập nhật dữ liệu bên trong danh sách. Cách tiếp cận này không chiếm thêm bộ nhớ vì nó cập nhật danh sách gốc

Loại nào là bất biến trong Python?

Kiểu dữ liệu bất biến 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 loại dữ liệu bất biến là int, str, bool, float, tuple , v.v.

Tính bất biến trong Python là gì, hãy cho một ví dụ?

Bất biến trong Python là gì? . Chúng không thể được sửa đổi sau khi chúng được tạo. Ví dụ: int trong Python là bất biến nên không thể sửa đổi chúng sau khi chúng được tạo. when the objects in the Python are not susceptible to the internal change are known as the immutable objects. They can not be modified once they are created. For example, int in Python is immutable hence they can not be modified once they are created.

Tại sao một số đối tượng không thể thay đổi trong Python?

Trong Python, các chuỗi được tạo thành bất biến để lập trình viên không thể thay đổi nội dung của đối tượng (thậm chí do nhầm lẫn). Điều này tránh các lỗi không cần thiết. Một số đối tượng bất biến khác là số nguyên, float, tuple và bool.

Cái nào không phải là bất biến trong Python?

Danh sách. Về bản chất, danh sách có thể thay đổi, điều đó có nghĩa là chúng ta có thể thay đổi các mục của danh sách bằng cách sử dụng toán tử gán hoặc sử dụng toán tử lập chỉ mục. Chúng tôi đã tạo một danh sách và thêm một số giá trị vào đó. Sau đó, chúng tôi sử dụng toán tử gán trong Python để gán giá trị tại chỉ mục đầu tiên