learn python data types
learn python data types

The Ultimate Guide to Python Data Types

Understanding data types in Python is crucial because they define what kind of operations you can perform on your data. This guide will walk you through everything you need to know about Python data types, from the basics to advanced topics, with plenty of examples to help you along the way.

Data TypesClassesDescription
Numericint, float, complexholds numeric values
Stringstrholds sequence of characters
Sequencelist, tuple, rangeholds collection of items
Mappingdictholds data in key-value pair form
Booleanboolholds either True or False
Setset, frozensethold collection of unique items

Primitive Data Types

Integers are whole numbers without a decimal point. They can be positive, negative, or zero.

Example:

age = 25
score = -100
balance = 0
print(age, score, balance) 

#output
25 -100 0

In this example, age, score, and balance are integers. You can perform arithmetic operations like addition, subtraction, multiplication, and division on them.


Floats represent numbers with a decimal point. They are useful when you need precision.

Example:

pi = 3.14
temperature = -5.6
print(pi, temperature)

#output
3.14 -5.6


# Here, pi and temperature are floats. You can use them in mathematical calculations where decimals are necessary.

Booleans have two possible values: True or False. They are often used in conditional statements.

Example:

is_python_fun = True
is_sun_blue = False
print(is_python_fun, is_sun_blue)

#output
True False

Booleans are perfect for scenarios where you need to keep track of binary states, such as whether a user is logged in.


Strings are sequences of characters enclosed in quotes. You can use single, double, or triple quotes for multi-line strings.

Example:

greeting = "Hello, World!"
multiline = """This is
a multi-line
string."""
print(greeting)
print(multiline)

#Output
Hello, World!
This is
a multi-line
string.

Strings are used to handle text. You can concatenate them, slice them, and format them.

Compound Data Types

Lists are ordered collections that can hold items of different data types. They are mutable, meaning you can change their content.

Example:

fruits = ["apple", "banana", "cherry"]
print(fruits)
fruits.append("orange")
print(fruits)

#output
['apple', 'banana', 'cherry']
['apple', 'banana', 'cherry', 'orange']

In this example, fruits is a list. You can add items to it, remove items, and perform other operations like sorting.


Tuples are similar to lists but are immutable. Once created, you cannot modify them.

Example:

coordinates = (10.0, 20.0)
print(coordinates)

#Output
(10.0, 20.0)

Tuples are great for data that should not change throughout the program, like geographic coordinates.


Sets are unordered collections of unique items. They are useful for membership tests and removing duplicates.

Example:

unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers)

# Output: {1, 2, 3, 4}

Sets automatically remove duplicate values, making them perfect for situations where uniqueness is important.


Dictionaries store data in key-value pairs. They are mutable and extremely useful for fast lookups.

Example:

person = {"name": "Alice", "age": 30}
person["age"] = 31
print(person)

#Output
{'name': 'Alice', 'age': 30}
{'name': 'Alice', 'age': 31}

Dictionaries allow you to associate a unique key with a value, which is handy for storing related pieces of information.

None represents the absence of a value. It’s often used to initialize variables or indicate that a function doesn’t return anything.

Example:

nothing = None
print(nothing)

#output
None

None is useful in scenarios where you want to check if a variable has been assigned a value or not.


Bytes are immutable sequences of bytes, while bytearrays are mutable. They are used for binary data.

Example:

byte_data = b"Hello"
mutable_byte_data = bytearray(byte_data)
mutable_byte_data[0] = 72  # H in ASCII
print(byte_data)
print(mutable_byte_data)

#Output
b'Hello'
bytearray(b'Hello')

Bytes and bytearrays are essential when working with binary data, like reading from or writing to files.

Python allows you to convert between different data types using built-in functions.

Example:

number = "123"
print(number, type(number))
converted_number = int(number)
print(converted_number, type(converted_number)

#output
123 <class 'str'>
123 <class 'int'>

Here, int(number) converts the string "123" into an integer 123. You can also convert to float, list, tuple, set, and dict using their respective functions.


You can use the type() function to check the type of a variable. Type hinting improves code readability and helps with static type checkers.

Example:

value = 42
print(type(value))  # Output: <class 'int'>

Mutable types (like lists and dictionaries) can be changed after creation, while immutable types (like strings and tuples) cannot.

Example:

immutable_tuple = (1, 2, 3)
immutable_tuple[0] = 4  # This will raise an error
#Output
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 2, in <module>
TypeError: 'tuple' object does not support item assignment



mutable_list = [1, 2, 3]
mutable_list[0] = 4  # This is allowed
print(mutable_list)

#output
[4, 2, 3]

Understanding mutability helps you avoid unexpected behavior in your programs.


Copying mutable data structures can be tricky. Use shallow and deep copies as needed.

  • A shallow copy creates a new list with references to the same elements as the original list. Changes to the shallow copy do not affect the original list.
  • A deep copy creates a completely new list with new elements that are copies of the elements in the original list. Changes to the deep copy do not affect the original list.

Example:

import copy 

original_list = [1, 2, 3]
shallow_copy = original_list.copy()
deep_copy = copy.deepcopy(original_list)

shallow_copy.append(4)
deep_copy.append(5)
print(original_list)  # Output: [1, 2, 3]
print(shallow_copy)  # Output: [1, 2, 3, 4]
print(deep_copy)  # Output: [1, 2, 3, 5]
  • original_list remains [1, 2, 3] because we didn’t modify it directly.
  • shallow_copy is [1, 2, 3, 4] because we appended 4 to it.
  • deep_copy is [1, 2, 3, 5] because we appended 5 to it

Real-Time Example

Imagine you have a recipe for a cake:

  • Original Recipe (original_list): [flour, sugar, eggs]
  • You decide to make a copy of the recipe for a friend:
    • Shallow Copy (shallow_copy): This is like writing down the ingredients on a new piece of paper but referencing the same type of ingredients (e.g., the same brand of flour, sugar, and eggs).
    • Deep Copy (deep_copy): This is like writing down the ingredients on a new piece of paper and also buying new packets of flour, sugar, and eggs, completely independent of your original packets.

Now, you make some changes to the copies:

  • You add “vanilla extract” to the shallow copy (shallow_copy):
    • This means you update your friend’s recipe with an extra ingredient, but it doesn’t affect your original recipe.
  • You add “chocolate chips” to the deep copy (deep_copy):
    • This means you update your own separate new recipe with chocolate chips, and again, it doesn’t affect your original recipe.

When you look at the recipes:

  • Original Recipe: Still [flour, sugar, eggs]
  • Shallow Copy: [flour, sugar, eggs, vanilla extract]
  • Deep Copy: [flour, sugar, eggs, chocolate chips]

Each list has its own set of ingredients, demonstrating how shallow and deep copies work independently of the original list.

Practical Applications and Best Practices

You often need to combine different data types to handle more complex data structures.

Example:

students = [
    {"name": "Alice", "grade": "A"},
    {"name": "Bob", "grade": "B"}
]
print(students[0]["name"])

#output
Alice

Avoid common mistakes like using mutable default arguments in functions.

Example:

def append_to_list(value, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list

print(append_to_list(1))  # Output: [1]
print(append_to_list(2))  # Output: [2]

Choose the right data type for performance. For instance, use tuples instead of lists when you need an immutable collection.

Example:

import time

start = time.time()
my_list = [i for i in range(1000000)]
end = time.time()
print(f"List creation time: {end - start} seconds")

start = time.time()
my_tuple = tuple(i for i in range(1000000))
end = time.time()
print(f"Tuple creation time: {end - start} seconds")

#Output
List creation time: 0.09094905853271484 seconds
Tuple creation time: 0.21065807342529297 seconds

Recap of Key Points

We’ve covered the essential data types in Python, from primitive types like integers and strings to compound types like lists and dictionaries. We also explored special data types, advanced topics, and practical applications.

Encouragement to Experiment

Keep experimenting with these data types in your projects. Understanding and effectively using data types will make you a more skilled Python programmer.

Additional Resources

Further Reading and References

Check out these resources for more in-depth information:


This comprehensive guide ensures you have a thorough understanding of Python data types, with practical examples and clear explanations to help you become a more effective programmer.

Let’s Get in Touch! Follow me on :

>GitHub: @gajanan0707

>LinkedIn: Gajanan Rajput

>Website: https://mrcoder701.com

>YouTube: mrcoder701

> Instagram: mr_coder_701

Show 1 Comment

1 Comment

Leave a Reply

Your email address will not be published. Required fields are marked *