Jeeshan
“Grokking Python Fundamentals”
8 min readJul 12, 2024

--

  • “Python Data Types Explained: Your A to Z Guide”

Python — Data types

In Python, data types are an essential concept that categorizes the type of data that can be used and manipulated within the program. Understanding data types is crucial because it affects what kind of operations you can perform on the data.

Python is dynamically typed, which means the type is determined at runtime and you don’t need to declare it explicitly. This flexibility allows Python to be very user-friendly and easy to work with.

Overview of Python Data Types

Python’s built-in data types can be categorized into several groups, each serving different purposes. Here is a structured table summarizing the categories and their corresponding types:

Category Data Types

Text Type str

Numeric Types int, float, complex

Sequence Types list, tuple, range

Mapping Type dict

Set Typesset, frozenset

Boolean Typebool

Binary Types bytes, bytearray, memoryview

None Type NoneType

Now, let’s explore all data types in detail, beginning with Text Type and Numeric Types.

Text Type (str)

Strings in Python are sequences of characters used for storing and representing text-based information.

Example

We will create a string variable and use basic string operations to manipulate it.

# String variable

greeting = “Hello, World!”

# Printing string

print(“greeting:”,greeting)

.Explanation:

  • greeting is a string variable holding the value "Hello, World!".
  • The print() method is used to print the string variable value.

Numeric Types (int, float, complex)

Python supports several numeric types for different kinds of mathematical operations:

  • Integer (int): Represents whole numbers without a fractional part, used for countable quantities.
  • Floating Point Number (float): Represents real numbers with a decimal point, suitable for measurements and precise calculations.
  • Complex Number (complex): Consists of a real and an imaginary part (denoted by 'j'), used in advanced fields like engineering and scientific computations.

Example

We will define variables for each numeric type and demonstrate a simple calculation with each.

# Numeric variables

integer_number = 10 # int

floating_number = 10.5 # float

complex_number = 2 + 3j # complex

# Demonstrating numeric operations

print(“Integer:”, integer_number + 5) # Addition with int

print(“Floating:”, floating_number + 0.5) # Addition with float

print(“Complex:”, complex_number + (1–2j)) # Addition with complex

Explanation:

  • integer_number, floating_number, and complex_number are examples of numeric types.
  • This code snippet adds numbers to each type to demonstrate how Python handles different numeric operations.
  • The print() function outputs the results of these additions, illustrating basic arithmetic operations with different numeric types.

Sequence Types (list, tuple, range)

Sequence types in Python include lists, tuples, and ranges. Each serves different purposes and has its own characteristics:

  • List (list): Lists are mutable sequences, which means their elements can be modified after creation. They are ideal for storing collections of items that may need to be changed during the execution of a program.
  • Tuple (tuple): Tuples are immutable sequences, meaning once they are created, their contents cannot be changed. This is useful for fixed data sets and can provide some optimization in terms of memory usage and performance.
  • Range (range): The range type represents a sequence of numbers and is often used for iterating over a set number of times in loops (such as in for loops). It generates numbers in a specified interval (start is inclusive, end is exclusive).

Example

In this example, we will create a list, a tuple, and a range, demonstrating how to use them in Python without complex operations.

# Creating a list

sports_list = [‘soccer’, ‘basketball’, ‘tennis’]

# Creating a tuple

colors_tuple = (‘red’, ‘green’, ‘blue’)

# Creating a range

number_range = range(5)

# Converting range to list to view it

range_list = list(number_range)

# Printing results

print(“List of sports:”, sports_list)

print(“Tuple of colors:”, colors_tuple)

print(“Range converted to list:”, range_list)

Explanation:

  • Sports List:
  • sports_list is created with three sports names. Lists are versatile and can be modified, so they're suitable for data that may change.
  • Colors Tuple:
  • colors_tuple contains three colors. The use of a tuple indicates that these values are constants and will not change throughout the program.
  • Number Range:
  • number_range is generated by range(5) which includes numbers from 0 to 4. The range itself is immutable and typically used for iteration.
  • range_list is the list conversion of number_range, intended to visually demonstrate the numbers generated by range.

Mapping Type (dict)

Mapping types in Python store data as key-value pairs. The dict (dictionary) is the standard and most widely used mapping type, allowing for fast data retrieval by key, and being mutable, which means you can change, add, or delete items after the dictionary is created.

Example

We will create a simple dictionary to store user information and demonstrate how to access and modify its elements.

# Creating a dictionary

user_info = {

‘name’: ‘Alice’,

‘age’: 25,

‘city’: ‘New York’

}

# Accessing dictionary elements

user_name = user_info[‘name’] # Access the value for key ‘name’

user_age = user_info[‘age’] # Access the value for key ‘age’

# Printing results

print(“User Name:”, user_name)

print(“User Age:”, user_age)

Explanation:

  • user_info is a dictionary containing keys 'name', 'age', and 'city' with their respective values.
  • Keys are used to access the values associated with them.
  • This demonstrates basic usage of dictionaries including accessing and modifying data.

Set Types (set, frozenset)

Set types in Python are collections of unique elements, meaning they do not allow duplicates. Python provides two types of sets: set and frozenset. Both types are used to store unique items, but they differ in their mutability.

  • Set (set): A set is mutable, meaning its content can be changed after it is created. This includes adding or removing items.
  • Frozenset (frozenset): A frozenset is immutable, meaning once it is created, its content cannot be changed. This makes frozensets useful as dictionary keys or elements of another set, where immutability is necessary.

Example

We will create a set and a frozenset to illustrate how to manipulate a set and the immutability of a frozenset.

# Creating a mutable set

sports_set = {‘soccer’, ‘basketball’, ‘tennis’}

# Adding an element to the set

sports_set.add(‘volleyball’) # Adds ‘volleyball’ to the set

# Trying to add a duplicate element

sports_set.add(‘soccer’) # ‘soccer’ is already in the set, so it won’t be added again

# Creating an immutable frozenset

colors_frozenset = frozenset([‘red’, ‘green’, ‘blue’])

# Printing results

print(“Sports Set:”, sports_set)

print(“Colors Frozenset:”, colors_frozenset)

Explanation:

  • Creating a Set:
  • sports_set is initially defined with three elements: 'soccer', 'basketball', and 'tennis'. Sets automatically remove duplicates, so only unique items are stored.
  • Adding Elements:
  • The add() method is used to include 'volleyball' in sports_set. This method modifies the set by adding an item if it isn't already present.
  • Attempting to add ‘soccer’ again does not change the set because ‘soccer’ is already included, demonstrating the set’s inherent property of storing only unique elements.
  • Creating a Frozenset:
  • colors_frozenset is created from a list with 'red', 'green', and 'blue'. The frozenset function converts the list into an immutable set.
  • Output:
  • The final print statements display the contents of both sports_set and colors_frozenset. The sports_set shows the four sports, highlighting that no duplicates were added. colors_frozenset shows the immutable collection of colors.

Boolean Type (bool)

The Boolean type, denoted as bool, represents two values: True and False. This type is commonly used in conditional statements and logic.

Example

We will demonstrate to use a boolean value.

# Boolean variables

is_student = True

has_library_card = False

print(“is_student:- “, is_student)

print(“has_library_card:- “, has_library_card)

Explanation:

  • is_student and has_library_card are Boolean variables set to True and False, respectively.
  • After that, the code prints the boolean value using the print() method.

Binary Types (bytes, bytearray, memoryview)

Binary types in Python are specialized data structures that deal with raw data like bytes and byte arrays. They are particularly useful when you need to work with binary data directly, such as when dealing with files, sending data over a network, or interfacing with binary data APIs. Python offers three binary types: bytes, bytearray, and memoryview.

  • Bytes (bytes): An immutable sequence of bytes. Perfect for handling data that shouldn't be altered, such as data you might read from a file and pass along without modification.
  • Bytearray (bytearray): A mutable counterpart to bytes. It allows modification of the bytes, making it suitable for tasks that require changes to the byte data, such as manipulating image files or decoding binary communication.
  • Memoryview (memoryview): A memoryview object provides a way to view and manipulate slices of another data structure (like bytes or bytearray) without copying it first. This is useful for large datasets or buffer-like structures where you want to avoid the overhead of copying large amounts of data.

Example

We will demonstrate the creation and basic manipulation of these binary types to illustrate their properties and uses.

# Creating bytes

byte_data = bytes([50, 100, 150]) # immutable sequence of bytes

# Creating bytearray

byte_array_data = bytearray([50, 100, 150]) # mutable byte array

# Modifying bytearray

byte_array_data[1] = 105 # change the second element from 100 to 105

# Creating a memoryview

memory_view = memoryview(byte_array_data) # create a memoryview on the bytearray

# Slicing memoryview

slice_of_memory_view = memory_view[1:3] # slice the memoryview to include elements 1 and 2

# Printing results

print(“Bytes:”, list(byte_data))

print(“ByteArray:”, list(byte_array_data))

print(“MemoryView Slice:”, list(slice_of_memory_view))

Explanation:

  • Bytes Creation:
  • byte_data is initialized with a list of integers that are converted to an immutable sequence of bytes. This object does not allow changes after its creation.
  • Bytearray Manipulation:
  • byte_array_data is similar to byte_data but as a bytearray, it is mutable. The example shows modifying the second element to demonstrate this mutability.
  • Memoryview Usage:
  • memory_view is a memoryview object based on byte_array_data. It allows for efficient operations on slices of the bytearray without copying the underlying data.
  • slice_of_memory_view demonstrates taking a slice of the memoryview. This slice is a view into the part of the original bytearray, reflecting any changes made to the bytearray.

None Type (NoneType)

In Python, NoneType has a single value, None, which is used to signify the absence of a value or a null value in other languages. It is commonly used to represent default values, return of functions that do not explicitly return anything, and as a placeholder for optional arguments.

Example

We will demonstrate the use of None with variables.

val = None # Defining the ‘val’ variable with ‘None’ value

if val is None: # If statement checks whether the value of ‘val’ is ‘None’

print(“No value provided”) # Prints when value is ‘None’

else:

print(“Value provided: “, str(val)) # Prints the value when it is not ‘None’

Explanation:

  • The variable val is assigned a None value.
  • The conditional if-else statement checks whether the value of the val is None, and prints the different message based on the val variable's value.
  • This example shows how None is used in conditionals to check for the absence of data.

With the introduction and examples of Python’s built-in data types completed, we’ve covered how to use strings, numbers, lists, tuples, dictionaries, sets, booleans, binary types, and the special NoneType. Each data type plays a crucial role in Python programming, allowing for flexible, powerful, and efficient code. Understanding these basics provides a strong foundation for tackling more complex programming tasks in Python. If you have more topics or specific details you want to explore further, feel free to let me know!

--

--

Jeeshan
“Grokking Python Fundamentals”

Data Analyst Enthusiast | Unveiling Insights Through Numbers | Helping You Navigate the World of Data Science | Exploring the Frontiers of ML and Generative AI