Chuyển đến nội dung chính

Chuyển đổi kiểu dữ liệu trong Python: Hướng dẫn kèm ví dụ

Trong hướng dẫn Python này, bạn sẽ xử lý chuyển đổi kiểu dữ liệu ngầm định và tường minh của các cấu trúc dữ liệu nguyên thủy và phi nguyên thủy với sự hỗ trợ của ví dụ mã!
Đã cập nhật 22 thg 7, 2026  · 14 phút đọc

Khám phá với AI

Mở trong ChatGPTMở trong ClaudeMở trong Perplexity

Mọi giá trị trong Python đều có một kiểu dữ liệu. Kiểu dữ liệu là cách phân loại dữ liệu để cho trình biên dịch hoặc trình thông dịch biết bạn muốn sử dụng dữ liệu như thế nào. Kiểu dữ liệu xác định các phép toán có thể thực hiện trên dữ liệu và cấu trúc mà bạn muốn lưu trữ dữ liệu. Trong khoa học dữ liệu, bạn thường cần thay đổi kiểu dữ liệu để dễ sử dụng và xử lý hơn.

Python có nhiều kiểu dữ liệu. Bạn hẳn đã thấy và làm việc với một vài kiểu trong số đó. Bạn có số nguyên và số thực dấu chấm động để xử lý giá trị số, boolean (bool) cho giá trị đúng/sai và chuỗi để làm việc với ký tự chữ và số. Bạn có thể dùng list, tuple, dictionary và set, là các cấu trúc dữ liệu cho phép lưu trữ một tập hợp giá trị. Để tìm hiểu thêm, hãy xem khóa học Data Types in Python của DataCamp.

Để tự mình chạy dễ dàng toàn bộ mã ví dụ trong hướng dẫn này, bạn có thể tạo miễn phí một sổ tay DataLab đã cài sẵn Python và chứa toàn bộ mẫu mã.

Kiểm tra kiểu dữ liệu trong Python

Trước khi chuyển đổi kiểu dữ liệu, việc kiểm tra chúng là hữu ích. Python cung cấp hai hàm chính:

  • type(): Trả về kiểu của một biến.
  • isinstance(): Kiểm tra một biến có thuộc về một kiểu nhất định hay không.
a = 5.5
print(type(a))  # Output: <class 'float'>

print(isinstance(a, int))  # Output: False
print(isinstance(a, float))  # Output: True

Chuyển đổi kiểu dữ liệu ngầm định và tường minh trong Python

Chuyển đổi dữ liệu trong Python có thể xảy ra theo hai cách: hoặc bạn tường minh yêu cầu trình biên dịch chuyển kiểu dữ liệu sang một kiểu khác, hoặc trình biên dịch tự hiểu và thực hiện cho bạn. Ở trường hợp đầu, bạn đang thực hiện chuyển đổi kiểu dữ liệu tường minh; ở trường hợp sau, bạn thực hiện chuyển đổi kiểu dữ liệu ngầm định.

Chuyển đổi kiểu dữ liệu ngầm định trong Python

Chuyển đổi ngầm định (implicit conversion hoặc coercion) là khi việc chuyển đổi kiểu diễn ra trong quá trình biên dịch hoặc lúc chạy và được Python xử lý trực tiếp cho bạn. Hãy xem ví dụ:

a_int = 1
b_float = 1.0
c_sum = a_int + b_float
print(c_sum)
print(type(c_sum))
 2.0
<class 'float'>

Mẹo: Bạn có thể dùng hàm type() trong Python để kiểm tra kiểu dữ liệu của một đối tượng.

Trong ví dụ, một giá trị số nguyên a_int được cộng với một giá trị số thực b_float, và kết quả tự động được chuyển sang số thực c_sum mà bạn không cần yêu cầu trình biên dịch. Đây là chuyển đổi dữ liệu ngầm định.

Tại sao giá trị số thực không được chuyển về số nguyên?

Điều này xuất phát từ khái niệm rộng hơn về thăng cấp kiểu (type promotion) trong khoa học máy tính. Nói ngắn gọn, đây là cơ chế bảo vệ của trình biên dịch cho phép bạn thực hiện phép toán bất cứ khi nào có thể bằng cách chuyển dữ liệu sang một siêu kiểu khác mà không làm mất thông tin.

Điều đó có nghĩa việc chuyển từ số thực sang số nguyên không được thực hiện vì khi đó trình biên dịch sẽ phải loại bỏ phần thập phân, dẫn đến mất thông tin.

Chuyển đổi kiểu dữ liệu tường minh trong Python

Chuyển đổi kiểu dữ liệu tường minh, thường gọi là ép kiểu (type casting), xảy ra khi bạn chủ động chuyển một giá trị từ kiểu này sang kiểu khác. Cách làm này cho bạn quyền kiểm soát trực tiếp vì bạn chỉ rõ kiểu đích trong mã. Nó thường dùng khi chuyển đổi ngầm định của Python không đáp ứng yêu cầu của bạn.

Cú pháp cho chuyển đổi tường minh là:

target_data_type(expression)

Ví dụ, nếu bạn muốn chuyển một số thực dấu chấm động sang số nguyên, bạn sẽ viết:

int(3.14)  # Converts 3.14 to 3

Lưu ý: Dù chuyển đổi tường minh rất hữu ích, nó có thể gây mất mát thông tin. Chẳng hạn, chuyển số thực sang số nguyên sẽ loại bỏ phần thập phân. Quan trọng là bạn hiểu những hệ quả này để tránh kết quả ngoài ý muốn trong chương trình.

Hãy khám phá một số chuyển đổi kiểu tường minh thường dùng.

Cấu trúc dữ liệu nguyên thủy và phi nguyên thủy trong Python

Cấu trúc dữ liệu nguyên thủy là các khối xây dựng cho thao tác dữ liệu và chứa các giá trị thuần, đơn giản. Python có bốn kiểu biến nguyên thủy:

  • Số nguyên (Integer)
  • Số thực dấu chấm động (Float)
  • Chuỗi (String)
  • Boolean

Cấu trúc dữ liệu phi nguyên thủy không chỉ lưu một giá trị mà là một tập hợp giá trị ở nhiều định dạng. Trong Python, bạn có các cấu trúc phi nguyên thủy sau:

  • List
  • Tuple
  • Dictionary
  • Set

Bạn có thể tìm hiểu thêm trong hướng dẫn Data Structures in Python của DataCamp.

Chuyển đổi cấu trúc dữ liệu nguyên thủy

Chuyển đổi số nguyên và số thực trong Python

Số nguyên và số thực là các kiểu dữ liệu làm việc với số.

Để chuyển số nguyên sang số thực, dùng hàm float() trong Python. Tương tự, nếu muốn chuyển số thực sang số nguyên, bạn có thể dùng hàm int().

a_int = 3
b_int = 2

# Chuyển kiểu tường minh từ int sang float
c_float_sum = float(a_int + b_int)
print(c_float_sum)
5.0
a_float = 3.3
b_float = 2.0
# Chuyển kiểu tường minh từ float sang int
c_int_sum = int(a_float + b_float)
print(c_int_sum)

c_float_sum = a_float + b_float
print(c_float_sum)
5
5.3

Vấn đề độ chính xác của số thực và mô-đun Decimal

Số học dấu chấm động trong Python có thể dẫn đến sai số về độ chính xác:

print(0.1 + 0.2)  # Output: 0.30000000000000004

Để tránh điều này, hãy dùng mô-đun Decimal:

from decimal import Decimal

print(Decimal('0.1') + Decimal('0.2'))  # Output: 0.3

Chuyển đổi từ số thực sang số phức trong Python

Bạn có thể chuyển số nguyên thành số phức bằng complex(real,imag). Hàm này nhận hai số (phần thực và phần ảo) và chuyển các số thực thành số phức.

real = 2
imag = 5
print(complex(real, imag))
(2+5j)

Chuyển đổi kiểu dữ liệu với chuỗi trong Python

Chuỗi là tập hợp một hoặc nhiều ký tự (chữ, số, ký hiệu). Bạn có thể cần chuyển chuỗi thành số hoặc số thành chuỗi khá thường xuyên.

price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + total  + "$")

 
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-12-54bd76b9b4bd> in <module>()
      2 price_cookie = 6
      3 total = price_cake + price_cookie
----> 4 print("The total is: " + total  + "$")


TypeError: Can't convert 'int' object to str implicitly

Ví dụ trên tạo ra TypeError, thông báo rằng trình biên dịch không thể ngầm định chuyển một số nguyên thành chuỗi.

Những gì chương trình nên làm ở đây có thể trực quan với bạn. Tuy nhiên, trình biên dịch không phải lúc nào cũng chắc chắn, vì vậy Python cung cấp cơ chế ép kiểu tường minh để bạn chỉ rõ điều mình muốn. Đây là cách bạn có thể chuyển số nguyên sang chuỗi trong Python bằng hàm str():

price_cake = 15
price_cookie = 6
total = price_cake + price_cookie
print("The total is: " + str(total)  + "$")
The total is: 21$

Cách làm tương tự khi bạn chuyển số thực sang chuỗi.

Trong Python, bạn cũng có thể chuyển chuỗi thành số nguyên và số thực khi có thể. Hãy xem điều này nghĩa là gì:

price_cake = '15'
price_cookie = '6'

# Nối chuỗi
total = price_cake + price_cookie
print("The total is: " + total + "$")

# Chuyển kiểu tường minh sang số nguyên
total = int(price_cake) + int(price_cookie)
print("The total is: " + str(total)  + "$")
The total is: 156$
The total is: 21$

Hãy phân tích đoạn mã.

price_cakeprice_cookie ban đầu là chuỗi. Sau đó, bạn cần tính tổng, nghĩa là trước tiên chúng phải được chuyển sang giá trị số nguyên tương ứng. Nếu không, trình biên dịch sẽ cho rằng phép toán bạn muốn là nối chuỗi thay vì cộng số. Tiếp đó, bạn cần đưa giá trị này vào chuỗi hiển thị cuối cùng, do đó cần chuyển tổng thành chuỗi để nối với phần còn lại của thông điệp.

Hy vọng ví dụ này giúp bạn thấy tầm quan trọng của chuyển đổi kiểu dữ liệu. Dù chỉ là ví dụ rất nhỏ, bạn đã có thể thấy nó hữu ích thế nào.

Lưu ý: bạn có để ý cụm "khi có thể" khi chuyển chuỗi sang số nguyên hoặc số thực không? Bởi không phải lúc nào cũng có thể chuyển chuỗi thành số và áp dụng phép toán số học cho chúng. Trình biên dịch nhận biết điều này và sẽ báo lỗi khi bạn thử làm như vậy. Xem ví dụ dưới đây:

price_cake = 'fifteen'
price_cookie = 'six'
total = int(price_cake) + int(price_cookie)
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-25-80591b8accda> in <module>()
      1 price_cake = 'fifteen'
      2 price_cookie = 'six'
----> 3 total = int(price_cake) + int(price_cookie)


ValueError: invalid literal for int() with base 10: 'fifteen'

Tóm tắt: Chuyển đổi kiểu dữ liệu nguyên thủy trong Python

Chuyển đổi Hàm Ví dụ Kết quả
Số nguyên sang số thực float() float(3) 3.0
Số thực sang số nguyên int() int(3.9) 3
Chuỗi sang số nguyên int() int('123') 123
Số nguyên sang chuỗi str() str(123) '123'

Chuyển đổi cấu trúc dữ liệu phi nguyên thủy

Chuyển đổi sang tuple và list trong Python

Giống như với số nguyên và số thực, bạn cũng có thể chuyển list sang tuple và tuple sang list.

Bạn còn nhớ tuple và list là gì chứ? ListTuple trong Python dùng để lưu trữ một bộ sưu tập các phần tử đồng nhất. Khác biệt là tuple là bất biến (immutable), nghĩa là khi đã định nghĩa, bạn không thể xóa, thêm hay sửa các giá trị bên trong.

Tại sao bạn muốn chuyển list sang tuple?

Bởi tuple là kiểu dữ liệu bất biến và cho phép tối ưu đáng kể cho các chương trình bạn tạo ra.

Vậy tại sao chuyển tuple sang list?

Có thể bạn muốn thay đổi tuple ban đầu. Khi đó, bạn có thể chuyển chúng sang list, thực hiện thay đổi, rồi chuyển lại thành tuple.

Trong Python, bạn có thể dùng hàm tuple() để trả về phiên bản tuple của giá trị truyền vào, và tương tự dùng list() để chuyển một tuple thành list:

a_tuple = ('a', 1) ,('f', 2), ('g', 3)
b_list = [1,2,3,4,5]

print(tuple(b_list))
print(list(a_tuple))
(1, 2, 3, 4, 5)
[('a', 1), ('f', 2), ('g', 3)]

Tương tự, đây là cách chuyển một chuỗi thành list hoặc tuple trong Python:

dessert = 'Cake'

# Chuyển các ký tự trong chuỗi thành từng phần tử trong tuple
print(tuple(dessert))

# Chuyển chuỗi thành list
dessert_list = list(dessert)
dessert_list.append('s')
print(dessert_list)
('C', 'a', 'k', 'e')
['C', 'a', 'k', 'e', 's']

Chuyển đổi sang dictionary và set trong Python

Bạn có thể dùng hàm dict() để chuyển một tuple thành dictionary và set() để chuyển list thành set. 

print(dict(a_tuple))
print(set(b_list))
{'a': 1, 'f': 2, 'g': 3}
{1, 2, 3, 4, 5}

Tương tự các hàm chuyển đổi khác, bạn chỉ cần gọi tên hàm để chuyển bất kỳ kiểu dữ liệu nào sang dictionary và set.

Sử dụng dataclasses cho dữ liệu có cấu trúc (Python 3.7+)

Thay vì dùng dictionary hoặc tuple, dataclasses cung cấp cách tốt hơn để xử lý dữ liệu có cấu trúc.

from dataclasses import dataclass

@dataclass
class Product:
    name: str
    price: float
    in_stock: bool

item = Product("Laptop", 799.99, True)
print(item)  # Output: Product(name='Laptop', price=799.99, in_stock=True)

Tóm tắt: Chuyển đổi cấu trúc dữ liệu phi nguyên thủy trong Python

Chuyển đổi Hàm Ví dụ Kết quả
List sang Tuple tuple() tuple([1, 2, 3]) (1, 2, 3)
Tuple sang List list() list(('a', 1)) ['a', 1]
Chuỗi sang List list() list('Cake') ['C', 'a', 'k', 'e']
Chuỗi sang Tuple tuple() tuple('Cake') ('C', 'a', 'k', 'e')
Tuple sang Dictionary dict() dict((('a', 1), ('b', 2))) {'a': 1, 'b': 2}
List sang Set set() set([1, 2, 3, 4, 5]) {1, 2, 3, 4, 5}

Unicode, số nhị phân, bát phân và thập lục phân trong Python

Hệ thống số đề cập đến số lượng ký hiệu hoặc ký tự dùng để biểu diễn một giá trị số bất kỳ. Hệ thập phân là hệ số bạn thường dùng hằng ngày. Trong hệ thập phân, bạn dùng mười ký hiệu: 0, 1, 2, 3, 4, 5, 6, 7, 8 và 9. Với mười ký hiệu này, bạn có thể biểu diễn mọi lượng. Unicode, nhị phân, thập lục phân và bát phân là các hệ thống số khác nhau.

Bạn chuyển sang hàng đơn vị tiếp theo khi hết ký hiệu. Trong hệ thập phân, để biểu diễn số lớn hơn 9 một đơn vị, bạn dùng 10, nghĩa là một đơn vị của mười và không đơn vị của một. Tuy nhiên, ở các hệ khác thì khác. Ví dụ, trong hệ nhị phân chỉ dùng hai ký hiệu 0 và 1, bạn phải chuyển sang vị trí chữ số tiếp theo khi hết ký hiệu. Vì vậy bạn sẽ đếm trong nhị phân như sau: 0, 1, 10, 11, 100, 101, v.v.

Hãy xem chi tiết một vài hệ thống số trong các phần tiếp theo.

Chuyển nhị phân sang thập phân trong Python

Số nhị phân là các số được biểu diễn với cơ số hai. Nghĩa là trong hệ nhị phân chỉ có hai ký hiệu để biểu diễn số: 0 và 1. Khi đếm từ 0 trong nhị phân, bạn sẽ nhanh chóng hết ký hiệu: 0, 1, ???

Khi đó không còn ký hiệu nào nữa. Bạn không chuyển sang chữ số 2 vì 2 không tồn tại trong nhị phân. Thay vào đó, bạn dùng tổ hợp đặc biệt của 1 và 0. Trong hệ nhị phân, 1000 tương đương 8 trong thập phân. Trong nhị phân, bạn dùng lũy thừa của 2, nghĩa là 8 về cơ bản là: (1(2^3)) + (0(2^2)) + (0(2^1)) + (0(2^0)) = 8. Vị trí của 1 và 0 xác định số mũ mà 2 được nâng lên.

Hãy xem ví dụ phức tạp hơn để rõ hơn:

Binary Number = 1001111
Decimal value = (1*(2^6)) + (0*(2^5)) + (0*(2^4)) + (1*(2^3)) + (1*(2^2)) + (1*(2^1)) + (1*(2^0))
              = 79

Trong Python, bạn có thể đơn giản dùng hàm bin() để chuyển từ giá trị thập phân sang giá trị nhị phân tương ứng.

Tương tự, dùng hàm int() để chuyển nhị phân sang thập phân. Hàm int() nhận đối số thứ hai là cơ số của số cần chuyển, với nhị phân là 2.

a = 79

# Cơ số 2 (nhị phân)
bin_a = bin(a)
print(bin_a)
print(int(bin_a, 2)) #Base 2(binary)
0b1001111
79

Chuyển bát phân sang thập phân trong Python

Bát phân là một hệ số khác với ít ký hiệu hơn hệ thập phân thông thường. Nó có cơ số 8, nghĩa là tám ký hiệu dùng để biểu diễn mọi lượng. Chúng là 0, 1, 2, 3, 4, 5, 6 và 7. Sau 7 là 10 vì 8 không tồn tại.

Giống như bạn dùng lũy thừa của 2 trong nhị phân để xác định giá trị của một số, bạn sẽ dùng lũy thừa của 8 vì đây là cơ số 8.

Trong bát phân, 10 tương đương 8 trong thập phân. Phân tích: (1(8^1)) + (0(8^0)) = 8.

Ví dụ phức tạp hơn:

Octal Number = 117
Decimal value = (1*(8^2)) + (1*(8^1)) + (7*(8^0))
              = 79

Trong Python, bạn có thể dùng hàm oct() để chuyển từ thập phân sang bát phân tương ứng. Hoặc bạn cũng có thể dùng int() với cơ số 8 cho hệ bát phân.

a = 79

# Cơ số 8 (bát phân)
oct_a = oct(a)
print(oct_a)
print(int(oct_a, 8))
0o117
79

Chuyển thập lục phân sang thập phân trong Python

Thập lục phân là hệ số cơ số 16. Không giống nhị phân và bát phân, nó dùng thêm sáu ký hiệu ngoài các chữ số trong hệ thập phân.

Vậy sau 9 là gì?

Khi cần thêm ký hiệu ngoài giá trị số thông thường, sẽ dùng chữ cái. Vì vậy trong thập lục phân, toàn bộ danh sách ký hiệu gồm 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E và F.

Dùng lại ví dụ như trước:

Hexadecimal Number = 4F
Decimal value = (4*(16^1)) + (F*(16^0))
              = 79

Trong Python, bạn có thể dùng hàm hex() để chuyển từ thập phân sang thập lục phân tương ứng, hoặc dùng int() với cơ số 16 cho hệ thập lục phân.

a = 79

# Cơ số 16 (thập lục phân)
hex_a = hex(a)
print(hex_a)
print(int(hex_a, 16))
0x4f
79

Chuyển Unicode sang ký tự

Python chr() chuyển số nguyên Unicode thành chuỗi. Unicode là tiêu chuẩn mã hóa ký tự được chấp nhận rộng rãi để hiển thị văn bản viết của nhiều ngôn ngữ.

Chúng tôi đã cung cấp nhiều số nguyên Unicode cho hàm chr() để hiển thị “DATACAMP.” Bạn cũng có thể dùng ord() để chuyển một ký tự đơn lẻ thành số nguyên Unicode. 

print(
    chr(68),
    chr(65),
    chr(84),
    chr(65),
    chr(67),
    chr(65),
    chr(77),
    chr(80),
)
D A T A C A M P

Tóm tắt: Chuyển đổi hệ thống số trong Python

Chuyển đổi Hàm Ví dụ Kết quả
Thập phân sang nhị phân bin() bin(79) 0b1001111
Nhị phân sang thập phân int() int('1001111', 2) 79
Thập phân sang bát phân oct() oct(79) 0o117
Bát phân sang thập phân int() int('117', 8) 79
Thập phân sang thập lục phân hex() hex(79) 0x4f
Thập lục phân sang thập phân int() int('4F', 16) 79
Unicode sang ký tự chr() chr(68) 'D'
Ký tự sang Unicode ord() ord('D') 68

Bạn đã hoàn thành!

Chúc mừng! Bạn đã tìm hiểu về chuyển đổi kiểu dữ liệu trong Python, chủ yếu sử dụng các phương thức tích hợp sẵn. Điều này chắc chắn sẽ giúp bạn linh hoạt hơn khi làm việc với nhiều kiểu dữ liệu, mang lại nhiều tự do hơn khi viết chương trình.

Chúng tôi có một khóa học tuyệt vời Intermediate Python for Data Science nơi bạn sẽ học cách vẽ dữ liệu bằng matplotlib, làm việc với dictionary và pandas DataFrame nổi tiếng. Bạn cũng sẽ thấy cách kiểm soát luồng chương trình với vòng lặp. Cuối khóa còn có một nghiên cứu tình huống để bạn áp dụng mọi thứ đã học và vận dụng kiến thức vào thực tế! 

FAQs

Làm thế nào để chuyển một danh sách số nguyên thành một chuỗi duy nhất trong Python?

Bạn có thể dùng phương thức join() kết hợp với map() để chuyển từng số nguyên thành chuỗi và nối lại.

int_list = [1, 2, 3, 4]
result = ''.join(map(str, int_list))
print(result)  # Output: '1234'

Điều gì xảy ra nếu bạn cố chuyển một chuỗi không phải số sang số nguyên trong Python?

Một ValueError sẽ được ném ra, cho biết chuỗi không phải là số nguyên hợp lệ.

int('abc')  # Raises ValueError: invalid literal for int() with base 10: 'abc'

Bạn có thể chuyển một set sang list trong Python không? Bằng cách nào?

Có, bạn có thể chuyển một set sang list bằng hàm list().

a_set = {1, 2, 3}
a_list = list(a_set)
print(a_list)  # Output: [1, 2, 3]

Làm thế nào để chuyển một chuỗi các số cách nhau bởi khoảng trắng thành danh sách số nguyên?

Dùng phương thức split() để tách chuỗi và map() để chuyển từng phần thành số nguyên.

numbers = "1 2 3 4"
int_list = list(map(int, numbers.split()))
print(int_list)  # Output: [1, 2, 3, 4]

Bạn có thể dùng hàm nào để kiểm tra kiểu dữ liệu của một biến trong Python?

Bạn có thể dùng hàm type() để kiểm tra kiểu dữ liệu của một biến.

x = 5
print(type(x))  # Output: <class 'int'>

Sejal Jaiswal's photo
Author
Sejal Jaiswal
LinkedIn

Tôi đã làm việc trong nhiều ngành và đảm nhiệm nhiều vai trò: nhà phát triển phần mềm, nhà nghiên cứu học máy, nhà khoa học dữ liệu, quản lý sản phẩm. Nhưng cốt lõi của tất cả, tôi là một lập trình viên yêu thích học hỏi và chia sẻ kiến thức!

Chủ đề

Tìm hiểu thêm về Python với các khóa học này!

Courses

Nhập môn Python

4 giờ
6.9M
Nắm vững phân tích dữ liệu với Python chỉ trong 4 giờ. Khóa học online này giúp bạn làm quen với giao diện Python và các thư viện phổ biến.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Có liên quan

blogs

Claude Opus 4.6: Tính năng, điểm chuẩn, các bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu bảng xếp hạng về mã hóa theo hướng tác nhân và suy luận phức tạp. Thêm nữa, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm