A blog about C#, Python, Azure and full stack development

Data Types in Python

Python, one of the most popular programming languages, is known for its simplicity and readability. Data types in Python are dynamic (an expanded definition of this term is given below). This system allows developers to work with various data types without the need for explicit declarations, making code more concise and readable, and, importantly, reducing cognitive load for the developer!

Key Takeaways:

  • Python is a dynamically typed language.
  • There are several built-in data types in Python.
  • Understanding these types is crucial for effective Python programming.

What is Dynamic Typing?

A “dynamically typed language” refers to a programming language in which variables do not have fixed types assigned at compile-time. Instead, the type of a variable is determined at runtime, based on the value it holds at a given moment. In Python, the same variable can hold values of different types during its lifecycle.

This contrasts with statically typed languages, where the type of each variable must be explicitly declared and remains fixed throughout the program’s execution. The dynamic typing approach offers flexibility in code writing, but it can also introduce runtime errors if assumptions about variable types are incorrect.

Primitive Data Types in Python

First, let’s go through some commonly used data types and how they are declared. By assigning a value to these variables, Python will know which type to declare the variable as.


The int type represents whole numbers, both positive and negative. For example:

x = 5
y = -3


The float type represents real numbers with a decimal point. For instance:

a = 4.5
b = -0.01


The str type represents sequences of characters, commonly known as strings. They can be defined using single, double, or triple quotes. For example:

name = "John"
greeting = 'Hello, World!'


The bool type represents Boolean values, which can be either True or False. They are often used in conditional statements:

is_active = True
is_closed = False

Composite Data Types in Python


A list is an ordered collection of items, which can be of any type. Lists are mutable, meaning their contents can change.

fruits = ["strawberry", "banana", "cherry"]


A tuple is similar to a list but is immutable. This means that once a tuple is created, its contents cannot be modified.

coordinates = (2.5, -1.0)


A dict (dictionary) is an unordered collection of key-value pairs. Keys must be unique, and they can be of any type. Values, on the other hand, can be of any type:

person = { "name": "Sue", "age": 32, "is_student": False }

Read about dictionary comprehension in Python.


A set is an unordered collection of unique items. It’s often used to eliminate duplicate values:

unique_numbers = {1, 2, 3, 3, 4}

Type Conversion

Python provides built-in functions to convert between different data types. These functions include int(), float(), str(), and others. For a comprehensive guide on type conversion in Python, refer to this W3Schools tutorial.

Checking Data Types

To check the type of a variable in Python, you can use the type() function:

x = 5 
# Outputs: <class 'int'>

Advanced Data Types in Python

Python is a versatile language with a wide range of advanced data types. These types allow developers to handle more complex data structures and operations, making Python suitable for a very wide range of applications.

Collections Module

The collections module in Python offers several advanced data types that can be used to enhance the functionality provided by the basic data types.


A namedtuple is a subclass of a tuple. It’s similar to a tuple but has named fields. This makes the code more self-documenting and readable.

from collections import namedtuple

Person = namedtuple('Person', ['name', 'age'])
john = Person(name="John", age=30)
print(  # Outputs: John


A deque (double-ended queue) is a generalization of stacks and queues. It supports thread-safe, memory-efficient appends, and pops from both ends of the deque.

from collections import deque

numbers = deque([1, 2, 3, 4])
print(numbers)  # Outputs: deque([0, 1, 2, 3, 4])


The Counter is a subclass of a dictionary used for counting hashable objects.

from collections import Counter

colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
count = Counter(colors)
print(count)  # Outputs: Counter({'blue': 3, 'red': 2, 'green': 1})

Type Annotations

With the introduction of Python 3.5, type annotations became a significant part of the language. While Python remains dynamically typed, type annotations allow developers to hint about the type of a variable.

def greet(name: str) -> str:
    return "Hello, " + name

In the above example, the name parameter is hinted to be of type str, and the function is expected to return a str.

Frequently Asked Questions

  1. What’s the difference between a list and a tuple?
    • A list is mutable, meaning its content can change, while a tuple is immutable.
  2. How do I check the type of a variable in Python?
    • You can use the type() function to check the type of a variable.
  3. Are type annotations mandatory in Python?
    • No, type annotations are optional in Python. They are used for clarity and can be beneficial for static type checking using tools like mypy.
  4. How can I convert one data type to another in Python?
    • Python provides built-in functions like int(), float(), and str() to convert between different data types.